【问题标题】:launching and closing a native browser that points to web app启动和关闭指向 Web 应用程序的本机浏览器
【发布时间】:2011-09-20 21:31:12
【问题描述】:

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

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

到目前为止,我已经弄清楚了如何打包我的应用程序并创建一个 exe 启动器(使用 install4j)(基本上我创建了一个带有码头服务器的可执行 jar 文件,我的 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 在其中包含一个原生浏览器,但我不知道如何做到这一点。

有什么想法吗?

在此先感谢

【问题讨论】:

    标签: java swing browser desktop launch


    【解决方案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();
        }
    
    }
    

    【讨论】:

    • 谢谢尤达。我刚刚尝试了您在上面建议的代码,它似乎可以解决问题。我只需要修改以下行即可打开 IE:code p = Runtime.getRuntime().exec("C:\\Program Files\\Internet Explorer\\iexplore.exe"); code 但是必须对浏览器的位置进行硬编码似乎有点不切实际,因为该解决方案必须在 Windows 和 Mac 平台上都可以工作!
    【解决方案2】:

    好的,我已经找到了我正在寻找的东西,所以我将我的发现发布在这里,供任何可能觉得此信息有用的人参考。我可以使用两种解决方案:

    1. 有一个叫做“BareBoneBrowser”的东西,查看项目链接here

      这个项目允许您在任何平台(windows、Mac OS、linux)上启动用户的默认浏览器,这正是我想要的。我已经尝试过了,它似乎工作正常。它几乎没有限制(您无法检测到该浏览器窗口是否已被用户关闭。如果您有时间理解代码并更改它,也许有一种方法)但它是一种启动浏览器的快速方法使用 Java,同时是跨平台的。

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

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

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

    干杯。

    【讨论】:

      【解决方案3】:

      试试这个

      java.awt.Desktop.getDesktop().browse(java.net.URI.create(URL));
      

      网址--//你的网址

      它将打开默认浏览器。 希望它适用于其他操作系统。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-07
        • 2017-01-17
        • 2018-04-27
        • 1970-01-01
        • 2016-09-11
        • 1970-01-01
        • 2021-09-26
        相关资源
        最近更新 更多