启动和关闭指向Web应用程序的本机浏览器

时间:2011-06-23 03:27:45

标签: java swing browser desktop launch

好的Stack Overflow人, 我确实遇到了业务问题,并希望得到一些关于如何解决问题的答案/指示/想法。也许在其他一些话题中已经提到过,但到目前为止我搜索了互联网但却无法找到答案。

业务问题:我们的一个客户希望拥有一个基于Java Web的应用程序,但是作为桌面应用程序启动。即,客户希望双击桌面上的某个图标并启动一个浏览器窗口,指向Web应用程序的URL /上下文,该URL将在Jetty服务器上运行本地用户点击图标时启动。

到目前为止,我已经想出了如何打包我的应用程序并创建一个exe启动器(使用install4j)(基本上我创建了一个可执行jar文件,其中包含jetty服务器和我的Web应用程序与一个启动Jetty服务器的启动类打包在一起将它指向Web应用程序的上下文。)

我的问题是我不知道如何启动(本机)Web浏览器并将其指向Web应用程序的URL /上下文。

我找到了启动用户默认浏览器的代码:

String url = "http://www.google.com";
java.awt.Desktop.getDesktop().browse(java.net.URI.create(url));

哪个好但不够好。它不够好的原因是,当用户关闭浏览器时,Jetty服务器仍将在后台运行。我想要的是当用户关闭浏览器时我也想检测此事件并关闭Jetty服务器(不使用任何活动的X或JavaScript)

有人提到创建一个JPanel,并使用一些DJ原生swing API在其中包含一个本机浏览器,但我不知道如何做到这一点。

有什么想法吗?

非常感谢提前

2 个答案:

答案 0 :(得分:1)

这是一段代码,仅供参考。您可以在进程中派生本机浏览器并将java Process对象返回到您的Java代码。您可以调用processObject.waitFor()方法来等待被调用的进程终止。

发射器:

public class Launcher implements Runnable {

    public void run() {
        Process p;
        try {
            p = Runtime.getRuntime().exec("notepad.exe");
            p.waitFor();

            // Do something after the forked process terminates
            System.out.println("The browser is exit");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

主要班级:

public class TestProcess {

    public static void main(String[] args) throws Exception {
        new Thread(new Launcher()).run();
    }

}

答案 1 :(得分:0)

好的,我已经设法找到了我要找的东西,所以我在这里发布我的发现给任何可能发现此信息有用的人。我只能使用两种解决方案:

  1. 有一个名为'BareBoneBrowser'的东西检查项目链接here

    这个项目允许您在任何平台(Windows,Mac OS,Linux)上启动用户的默认浏览器,这正是我想要的。而我已经尝试过它似乎工作正常。它没有什么限制(您无法检测用户是否关闭了浏览器窗口。如果您有时间了解代码并对其进行更改,可能会有一种方法)但是它可以快速启动浏览器与Java同时是跨平台。

  2. 我找到的另一个解决方案是DJ Project click here for project home page

    这几乎是一个完整的解决方案,允许您在JPanel中打开“本机”浏览器。跨平台(适用于Windows和Mac OS甚至Linux)。因为浏览器在JPanel中启动,所以您可以检测用户何时“关闭”JPanel并终止应用程序,这样您就可以执行任何需要执行的操作来关闭/终止或停止应用程序并执行所需的任何清理工作。

  3. 希望这可以帮助任何想要做类似事情的人。 我的建议是只需下载代码并开始使用它,或者做一个小型POC(概念验证)项目,以便更好地了解API。

    干杯。