Java 是否可以使用JNLP安装浏览器
我正在使用JNLP启动my.jar JNLP的示例如下:Java 是否可以使用JNLP安装浏览器,java,jnlp,Java,Jnlp,我正在使用JNLP启动my.jar JNLP的示例如下: <?xml version="1.0" encoding="utf-8"?> <jnlp spec="1.0+" codebase="https://***" href="my.jnlp"> <information> <title>***</title> <offline-allowed/> </in
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+"
codebase="https://***"
href="my.jnlp">
<information>
<title>***</title>
<offline-allowed/>
</information>
<resources>
<jar href="lib/my.jar"/>
<j2se version="1.8+"
href="http://java.sun.com/products/autodl/j2se"/>
</resources>
<security>
<all-permissions/>
</security>
<application-desc main-class="my.gui.***">
<argument>-browser.cmd=firefox</argument>
</application-desc>
</jnlp>
***
-browser.cmd=firefox
如您所见,我设置了一个变量browser.cmd:
<argument>-browser.cmd=firefox</argument>
-browser.cmd=firefox
它在my.jar中用于在指定的浏览器中打开HTML内容。但不幸的是,它在某些情况下并不起作用
因此,我认为可以在JNLP中编写函数,该函数将返回安装在系统中的浏览器列表。这些值的使用方式如下:
browser.cmd=返回的值
可以通过JNLP方式实现吗?您不能向JNLP描述符添加任何代码。这是纯粹的宣言 我建议你几种解决办法 如果使用此选项打开特定浏览器,最好的解决方案是使用API:
if(Desktop.isDesktopSupported()){
Desktop desktop = Desktop.getDesktop();
try {
desktop.browse(new URI(url));
} catch (IOException | URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
由于各种原因,将特定浏览器作为外部进程运行被认为是一种不好的方式
但是据我所知,您不能更改应用程序
第二种解决方案如下。您可以实现自己的“浏览器发现程序”。使用JNLP运行此发现程序,发现浏览器,然后通过JNLP运行“真正的”应用程序,或者更好,直接从发现程序将浏览器作为参数传递
如果您能找到“正确”的浏览器,此解决方案将起作用。然而,这种任务不能通过任何跨平台的方式来实现。例如,在Windows上,您可以检查注册表,在Linux上,它取决于味道等
另一个可能很奇怪,但我认为最好的解决方案是以下几点。您可以使用AOP包装Runtime.exec()
方法。现在传递非常特殊的,不是现有的参数,而是浏览器,让我们说“我的默认浏览器”。您可以在aspect中发现此字符串并调用regularexec()
,除非该命令等于此特殊值。但是在您的特殊情况下,您可以调用desktop.browse(新URI(url))代码>(请参阅我答案的开头)
这个解决方案可能听起来很复杂,但事实并非如此。您可以使用AspectJ实现5行长的方面。此解决方案将通过手动创建新进程解决运行浏览器的人所犯的“罪行”,并且您无法更改其代码。这个解决方案是可移植的,可以在任何平台上工作,不依赖于系统上安装了什么浏览器以及当前用户是否可以运行它们 不能向JNLP描述符添加任何代码。这是纯粹的宣言
我建议你几种解决办法
如果使用此选项打开特定浏览器,最好的解决方案是使用API:
if(Desktop.isDesktopSupported()){
Desktop desktop = Desktop.getDesktop();
try {
desktop.browse(new URI(url));
} catch (IOException | URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
由于各种原因,将特定浏览器作为外部进程运行被认为是一种不好的方式
但是据我所知,您不能更改应用程序
第二种解决方案如下。您可以实现自己的“浏览器发现程序”。使用JNLP运行此发现程序,发现浏览器,然后通过JNLP运行“真正的”应用程序,或者更好,直接从发现程序将浏览器作为参数传递
如果您能找到“正确”的浏览器,此解决方案将起作用。然而,这种任务不能通过任何跨平台的方式来实现。例如,在Windows上,您可以检查注册表,在Linux上,它取决于味道等
另一个可能很奇怪,但我认为最好的解决方案是以下几点。您可以使用AOP包装Runtime.exec()
方法。现在传递非常特殊的,不是现有的参数,而是浏览器,让我们说“我的默认浏览器”。您可以在aspect中发现此字符串并调用regularexec()
,除非该命令等于此特殊值。但是在您的特殊情况下,您可以调用desktop.browse(新URI(url))代码>(请参阅我答案的开头)
这个解决方案可能听起来很复杂,但事实并非如此。您可以使用AspectJ实现5行长的方面。此解决方案将通过手动创建新进程解决运行浏览器的人所犯的“罪行”,并且您无法更改其代码。这个解决方案是可移植的,可以在任何平台上工作,不依赖于系统上安装了什么浏览器以及当前用户是否可以运行它们 您如何使用这些数据?您是否使用java应用程序中的命令行启动进程?嗨,Alex,稍后会使用它,但我无法更改java应用程序(专有软件),这就是我提出此问题的原因。您如何使用此数据?您是否使用java应用程序中的命令行启动该过程?嗨,Alex,稍后会使用它,但我无法更改java应用程序(专有软件),这就是我提出此问题的原因。