当您的代码通过 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;
}
这也避免了在编译时需要在类路径中包含 javaws.jar。
或者,您可以切换到使用 javaws.jar 编译并捕获 NoClassDefFoundError :
private boolean isRunningJavaWebStart() {
try {
ServiceManager.getServiceNames();
return ds != null;
} catch (NoClassDefFoundError e) {
return false;
}
}
使用 ServiceManager.lookup(String) 和 UnavailableServiceException 很麻烦,因为它们都是 JNLP API 的一部分。ServiceManager.getServiceNames() 没有记录到抛出。我们专门调用此代码来检查 NoClassDefFoundError。