我的Java应用程序可以独立运行。但是,当我将其作为Java Web Start应用程序运行时,它会启动,但是当我单击某个按钮时会失败。我不知道如何调试它,以为我要添加日志记录。这导致权限被拒绝错误,甚至无法启动。
为了尝试解决该问题,我添加了
permission java.util.logging.LoggingPermission "control"
到C:\ Program Files \ Java \ jre1.8.0-171 \ lib \ security \ java.policy文件和C:\ Program Files \ Java \ jdk1.8.0-171 \ jre \ lib \ security \ java .policy文件。重新启动Apache HttpServer,然后重试。结果相同。
接下来,我将以下行添加到相同的两个文件中:
permission java.security.AllPermission;
结果相同。
接下来,我对jar文件进行了自签名。结果相同。
接下来我添加了
<security><all-permissions/></security>
到动态生成的.jnlp文件。这次我收到一条新消息: “未签名的应用程序请求对系统的无限制访问”
jarsigner验证是否已对jar文件进行签名:
jarsigner -verify myjarfile.jar
jar已验证。
我不知道还能尝试什么。有建议吗?
答案 0 :(得分:0)
首先,需要有一个“;”在“控制”之后。我不知道这样是否可以解决问题,但是我在日志文件中发现了解析错误。同时,我将所有“记录器”命令都改回了System.out.println命令。
接下来,我在Java控制面板的“高级”选项卡中选中了“启用跟踪”和“启用日志记录”。
然后,在DOS shell中,我导航到myjnlp.jnlp文件的位置,并输入以下命令:
set JAVAWS_TRACE_NATIVE=1
set JAVA_TOOL_OPTIONS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
javaws myjnlp.jnlp
这导致在主目录中的C:\ Users \ Greg \ AppData \ LocalLow \ Sun \ Java \ Deployment \ log中创建日志文件 然后我可以看到发生了什么事。
很不幸,这是一个新问题。参见下面的代码:
File source = new File(localFilename);
File dest = new File("C:/E360/CadIntegration/" +localFilename);
try {
Files.copy(source.toPath(),dest.toPath());
msg = "Because IP was blank, file was copied to C:/E360/CadIntegration";
} catch (IOException ex) {
msg = "problem copying " +source.toPath() +" to " +dest.toPath();
System.out.println("uploadCadChanges: " +msg +", IOException is "+ex.getMessage());
}
如果我使用javaws运行该应用程序,则该应用程序运行良好,文件已成功复制。但是,如果我从网页运行它,它将失败并显示IOException,而ex.getMessage()只会显示“ CadChanges.txt”。真正的帮助。
我找到了原因。从网页运行时,当前工作目录更改为当前目录= C:\ Program Files(x86)\ Google \ Chrome \ Application \ 67.0.3396.99,但从javaws运行时,目录不是。解决方案是通过参数标签将当前目录传递到.jnlp文件,然后让应用将cwd更改为该文件。