这已被承认为JavaWS错误: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8170522
我们似乎在OS X上发现了Java WebStart实现的错误,即webstart应用程序无法通过Desktop.getDesktop()。open(文件文件)API启动外部应用程序。仅当从其桌面快捷方式启动Java WebStart应用程序时才会发生这种情况。有没有人看过这种行为和/或可以建议一种解决方法和/或其他测试渠道?
在OS X平台上,当使用API从已签名的Java Webstart应用程序中打开外部应用程序(如Desktop.getDesktop()。open(文件文件)时,外部应用程序加载总是导致该应用程序崩溃时JavaWS应用程序从其桌面快捷方式启动。当直接从JNLP文件或Java控制面板中的缓存启动完全相同的webstart应用程序时,外部应用程序加载时没有问题。在Windows上不会发生此问题。
很容易复制:
在OS X客户端计算机上进行如下测试:
在应用程序发出的任何可以打开另一个应用程序的命令中观察到相同的行为,即这不仅仅是在RDP文件/应用程序中看到...当从桌面快捷方式加载JavaWS应用程序时,每个机制我们试过了。
直接从JNLP加载或从Java控制面板中的Java缓存加载时,完全相同的代码可以正常工作。代码中没有出现错误或警告,因此看起来外部命令已成功发出,但JVM与操作系统交互的方式在两种情况下必须不同。
有人可以建议在从桌面快捷方式加载时改变webstart应用程序的行为可以做些什么,并使Windows和OS X体验保持一致?
要复制问题的文件如下:
使用open命令演示类:
package com.example;
import java.awt.*;
import java.io.File;
import java.util.logging.Logger;
public enum Demo {
INSTANCE;
private static final Logger log = Logger.getLogger(Demo.class.getName());
public static void main(String[] args) {
Demo demo = Demo.INSTANCE;
String filename = System.getProperty("user.home")
+ System.getProperty("file.separator")
+ "test.rdp";
log.info("opening file: " + filename);
demo.openFile(new File(filename));
}
public void openFile(File file) {
log.info("Desktop.getDesktop().open(" + file.getAbsolutePath() + ")");
try {
if (file.exists()) {
Desktop.getDesktop().open(file);
} else {
log.info("Cannot open file " + file.getAbsolutePath() + " does not exist.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
演示JNLP文件:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="6.0+"
codebase="https://yourwebserver.example.com/path/to/app"
href="OpenDemo.jnlp" >
<information>
<title>Open Demo</title>
<vendor>Example</vendor>
<shortcut online="true" install="true">
<desktop/>
</shortcut>
<update check="timeout" policy="always"/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<java version="1.8+" />
<jar href="./OpenDemo.jar" main="true" />
</resources>
<application-desc
main-class="com.example.Demo" />
</jnlp>
ANT构建文件:
<?xml version="1.0" encoding="UTF-8"?>
<project name="Build Open Demo WebStart Application">
<property name="compiled.basedir" value="../out/production/demo-webstart-app/" />
<property name="target.jarname" value="OpenDemo.jar" />
<!-- default the target to be 1.8 -->
<property name="ant.build.javac.target" value="1.8" />
<property name="ant.build.javac.source" value="1.8" />
<!-- bundle the jar -->
<target name="bundle">
<jar destfile="../${target.jarname}"
filesetmanifest="mergewithoutmain"
basedir="${compiled.basedir}" >
<include name="com/example/**" />
<manifest>
<attribute name="Application-Name" value="OpenDemo" />
<attribute name="Codebase" value="*" />
<attribute name="Permissions" value="all-permissions" />
<attribute name="Caller-Allowable-Codebase" value="*" />
<attribute name="Entry-Point" value="com.example.Demo" />
<attribute name="Trusted-Only" value="true" />
</manifest>
</jar>
</target>
<!-- sign what we have bundled with a self signed CA -->
<!-- cert created using:
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore -storepass opendemo -validity 30 -keysize 2048
What is your first and last name?
[Unknown]: OpenDemo
What is the name of your organizational unit?
[Unknown]: OpenDemo
What is the name of your organization?
[Unknown]: OpenDemo
What is the name of your City or Locality?
[Unknown]: OpenDemo
What is the name of your State or Province?
[Unknown]: OpenDemo
What is the two-letter country code for this unit?
[Unknown]: OD
Is CN=OpenDemo, OU=OpenDemo, O=OpenDemo, L=OpenDemo, ST=OpenDemo, C=OD correct?
[no]: yes
Enter key password for <selfsigned>
(RETURN if same as keystore password):
-->
<target name="sign" depends="bundle">
<signjar
jar="../${target.jarname}"
lazy="false"
alias="selfsigned"
keystore="../keystore"
storepass="opendemo"
/>
</target>
</project>
答案 0 :(得分:0)
问题特定于Mac上的远程桌面应用程序。 RemoteDesktop客户端崩溃而不是生成它的java进程。原因尚不清楚。
在Windows上远程桌面是从Web启动,缓存查看器启动或快捷方式启动启动的,MAC也是如此。但是,它在MAC上的桌面快捷方式案例中崩溃,随后是崩溃对话框,显示详细信息,退出(确定)或重新打开的选项。
解决方法:选择重新打开此对话框,远程桌面就可以了。