好的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在其中包含一个本机浏览器,但我不知道如何做到这一点。
有什么想法吗?
非常感谢提前
答案 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)
好的,我已经设法找到了我要找的东西,所以我在这里发布我的发现给任何可能发现此信息有用的人。我只能使用两种解决方案:
有一个名为'BareBoneBrowser'的东西检查项目链接here
这个项目允许您在任何平台(Windows,Mac OS,Linux)上启动用户的默认浏览器,这正是我想要的。而我已经尝试过它似乎工作正常。它没有什么限制(您无法检测用户是否关闭了浏览器窗口。如果您有时间了解代码并对其进行更改,可能会有一种方法)但是它可以快速启动浏览器与Java同时是跨平台。
我找到的另一个解决方案是DJ Project click here for project home page
这几乎是一个完整的解决方案,允许您在JPanel中打开“本机”浏览器。跨平台(适用于Windows和Mac OS甚至Linux)。因为浏览器在JPanel中启动,所以您可以检测用户何时“关闭”JPanel并终止应用程序,这样您就可以执行任何需要执行的操作来关闭/终止或停止应用程序并执行所需的任何清理工作。
希望这可以帮助任何想要做类似事情的人。 我的建议是只需下载代码并开始使用它,或者做一个小型POC(概念验证)项目,以便更好地了解API。
干杯。