2011-06-23 42 views
1

你好堆栈溢出人, 我确实有一个业务问题,并希望得到一些关于如何解决它的答案/指针/想法。也许这已在其他一些话题中提到,但到目前为止我搜索了互联网但无法找到直接答案。启动并关闭指向网络应用程序的本地浏览器

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

到目前为止,我已经找到了如何包装我的应用程序并创建一个exe启动器(使用install4j)(基本上我创建了码头服务器,并启动类,将启动码头封装在一起我的web应用程序的可执行的JAR文件服务器并将其指向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,但我不知道如何做到这一点。

任何想法?

非常感谢提前

回答

1

这是一段代码只是供参考。你可以在一个进程中fork原生浏览器并返回一个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(); 
    } 

} 
+0

谢谢尤达。我只是尝试了你上面建议的代码,它似乎在做伎俩。我只需修改以下行来打开IE: 'code' p = Runtime.getRuntime().exec(“C:\\ Program Files \\ Internet Explorer \\ iexplore.exe”); 'code' 但是必须对浏览器的位置进行硬编码似乎有点不实际,因为解决方案必须在Windows和Mac平台上工作! – Motokazi

0

好吧,我设法找到我所寻找的,所以我在这里发布我发现的人谁可能会发现这个信息很有用。只是有2种解决方案,我可以用:

  1. 有一种叫做“BareBoneBrowser”检查的项目链接here

    这个项目可以让你启动任何平台上的用户的默认浏览器(窗口, Mac OS,Linux),这正是我想要的。我已经试过了,它似乎工作正常。它的局限性很少(你无法检测到用户是否关闭了浏览器窗口。如果你有时间理解代码并改变代码,也许有一种方法),但它是一种快速获得使用Java启动的浏览器的方式,同时也是跨平台的。

  2. 其他的解决方案,我发现是DJ项目click here for project home page

    这几乎是一个完整的解决方案,使您可以打开一个JPanel一个“天然”的浏览器。跨平台(适用于Windows和Mac OS甚至Linux)。由于浏览器是在JPanel内部启动的,因此您可以检测用户何时关闭JPanel并终止应用程序,以便随后执行关闭/终止或停止应用程序以及执行所需清理工作所需的任何操作。

希望这可以帮助任何想要做类似事情的人。 我的建议是下载代码并开始玩它,或者做一个小的POC(Proof Of Concept)项目来更好地理解API。

干杯。

-1

试试这个

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

网址 - //您的网址

它会打开默认浏览器。 希望它的作品其他操作系统。

相关问题