Java Web Start 应用程序日志记录权限被拒绝

Java Web Start app logging permission denied

我的 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 文件。这次我收到一条新消息: "unsigned application requesting unrestricted access to system"

jarsigner 验证确认 jar 文件已签名:

jarsigner -verify myjarfile.jar

jar 已验证。

我不知道还能尝试什么。建议?

首先,需要有一个“;”在 "control" 之后。我不知道这是否可以解决问题本身,但我在日志文件中发现了一个解析错误。同时,我已将所有 "logger" 命令改回 System.out.println 命令。

接下来,我在 Java 控制面板的“高级”选项卡中检查了 "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"。真正有帮助。

找到原因了。当来自网页的 运行 时,当前工作目录更改为 current dir = C:\Program Files (x86)\Google\Chrome\Application.0.3396.99 但是当来自 javaws 的 运行 时,它不是't。解决方案是通过参数标记将当前目录传递给 .jnlp 文件,并让应用程序将 cwd 更改为它。