ddi*_*rov 13 java java-web-start
正如我在最近的问题中明确指出的那样,Swing应用程序在使用Sun Webstart启动程序(至少从Java SE 6开始)运行时需要显式调用System.exit().
我想尽可能地限制这个hack,我正在寻找一种可靠的方法来检测应用程序是否在Webstart下运行.现在我正在检查系统属性"webstart.version"的值是否为空,但我在文档中找不到任何保证,该属性应由未来的版本/替代实现设置.
有没有更好的方法(最好不要停止对webstart API的依赖?)
jla*_*jla 11
当你的代码是通过javaws的推出,javaws.jar已加载,并且您不希望依赖于JNLP API类是可用的.您可以改为查看是否存在JNLP API类,而不是测试不保证存在的系统属性:
private boolean isRunningJavaWebStart() {
boolean hasJNLP = false;
try {
Class.forName("javax.jnlp.ServiceManager");
hasJNLP = true;
} catch (ClassNotFoundException ex) {
hasJNLP = false;
}
return hasJNLP;
}
Run Code Online (Sandbox Code Playgroud)
这也避免了在编译时需要在类路径中包含javaws.jar.
或者,您可以切换到使用javaws.jar进行编译并捕获NoClassDefFoundError:
private boolean isRunningJavaWebStart() {
try {
ServiceManager.getServiceNames();
return ds != null;
} catch (NoClassDefFoundError e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
使用ServiceManager.lookup(String)和UnavailableServiceException很麻烦,因为它们都是JNLP API的一部分.未记录ServiceManager.getServiceNames()以进行抛出.我们专门调用此代码来检查NoClassDefFoundError.
使用javax.jnlp.ServiceManager检索webstart服务.如果可用,则在Webstart下运行.
见http://download.java.net/jdk7/docs/jre/api/javaws/jnlp/index.html
| 归档时间: |
|
| 查看次数: |
3238 次 |
| 最近记录: |