通过将--permit-illegal-access标志传递给VM,我使用JRE build 9-ea + 163运行我的应用程序.现在我想用Java Webstart启动应用程序.第一次尝试
javaws -J--permit-illegal-access <JNLP-Url>
Run Code Online (Sandbox Code Playgroud)
不起作用.我得到同样InaccessibleObjectException有module java.base does not "opens java.util" to unnamed module因为没有国旗.
添加<j2se java-vm-args="--permit-illegal-access" version="9*"/>到JNLP没有帮助.
Webstart支持--permit-illegal-access旗帜吗?
我还可以在JNLP文件中指定标志吗?
顺便说一句,Java 9
javaws https://docs.oracle.com/javase/tutorialJWS/samples/deployment/NotepadJWSProject/Notepad.jnlp
Run Code Online (Sandbox Code Playgroud)
投掷IllegalAccessException,-J--permit-illegal-access也没有帮助.
PS:将env变量设置JAVA_TOOL_OPTIONS为--permit-illegal-access有效,但由于无法访问客户端,因此不是解决方案.
我一直在使用https://apimeister.com/2015/06/27/add-jar-to-the-classpath-at-runtime-in-jjs.html中的反射技术来在运行时在Java的nashorn jjs中加载类。
它在Java 8中有效,但在Java 9中则无效。我知道/sf/answers/2888568721/中提到的推荐命令行解决方法
并且根据/sf/answers/3217961981/,使用=代替标志和其args之间的空格的这种替代语法似乎也应该是有效的(由于通过nashorn方法将jvm args通过通过jjs-J--...
有什么提示吗?
这有效...(java 8)...
$ wget -q http://central.maven.org/maven2/org/apache/poi/poi/4.0.0/poi-4.0.0.jar
$ /usr/lib/jvm/java-1.8.0/bin/jjs -scripting loadit.js -- poi-4.0.0.jar
DONE
Run Code Online (Sandbox Code Playgroud)
这不是...(java 9)...
$ wget -q http://central.maven.org/maven2/org/apache/poi/poi/4.0.0/poi-4.0.0.jar
$ /usr/lib/jvm/java-9/bin/jjs -J--add-opens=java.base/java.net=ALL-UNNAMED -scripting loadit.js -- poi-4.0.0.jar
Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make protected void java.net.URLClassLoader.addURL(java.net.URL) accessible: module java.base does not "opens java.net" to module jdk.scripting.nashorn.scripts
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:337)...
Run Code Online (Sandbox Code Playgroud)
这是loadit.js ...
// loadit.js
function addUrlToClasspath(pth) {
var s = java.lang.ClassLoader.getSystemClassLoader();
var C = Java.type("java.lang.Class[]");
var …Run Code Online (Sandbox Code Playgroud)