java - 启动和关闭指向 Web 应用程序的 native 浏览器

标签 java swing browser desktop launch

大家好,Stack Overflow 的 friend 们, 我确实有一个业务问题,希望获得一些关于如何解决它的答案/指示/想法。也许这已经在其他一些主题中提到过,但到目前为止我在互联网上搜索但无法找到直接的答案..

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

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

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

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

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

这很好,但还不够好。它不够好的原因是,当用户关闭浏览器时,Jetty 服务器仍然在后台运行。我想要的是当用户关闭浏览器时我还想检测此事件并关闭 Jetty 服务器(请不要使用任何 Active X 或 JavaScript)

有人提到创建一个 JPanel 并使用一些 DJ native swing API 在其中包含一个 native 浏览器,但我不知道如何执行此操作。

有什么想法吗?

提前非常感谢

最佳答案

这是一段代码仅供引用。您可以在进程中 fork native 浏览器并将 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();
    }

}

关于java - 启动和关闭指向 Web 应用程序的 native 浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448993/

相关文章:

java - 不能抛出私有(private)成员类的实例? - java

java - 修改可选<Person>(如果存在)

java - 为什么这个 Java 绘图程序不能绘制多个椭圆形?

javascript - 随着时间的推移加速的功能

java - 哪个代码在时间复杂度方面表现更好?

java - Android ListView 延迟加载的东西行为异常

java - 为什么 SetMinimumSize 设置最小高度而不是宽度?

java - 当键入一个 Jtextfield 时,从数据库中将数据提取到 Jtextfield 中

http - 当浏览器说 HTTP 请求被中止时,实际发生了什么?

html - css 字体上下间距不一致