我的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已验证。
我不知道还能试什么。有什么建议吗?
发布于 2018-07-27 05:04:15
首先,在"control“之后需要有一个";”。我不知道这样做本身是否能解决这个问题,但我在日志文件中发现了一个解析错误。同时,我把我所有的"logger“命令改回了System.out.println命令。
接下来,我在Java控制面板的Advanced选项卡中选中了"Enable tracing“和"Enable logging”。
然后,在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更改为该目录。
https://stackoverflow.com/questions/51544014
复制相似问题