那些可能不想读那么多的人的摘要:
我想知道是否有办法将"ad-hoc"命令行参数传递给javaws可执行文件.我已经知道如何在JNLP文件中指定它们:
<application-desc main-class="org.example.ClassName">
<argument>...
Run Code Online (Sandbox Code Playgroud)
虽然这可以用于我想要完成的任务,但我将此视为一种解决方法.我试过了
javaws http://example.org/launch.jnlp <some CLI args here>
Run Code Online (Sandbox Code Playgroud)
但我认为,"这里的一些CLI args"被忽略了.
如果我们可以将ad-hoc命令行参数传递给javaws,那么javaws应用程序可能更像"一等公民""普通应用程序".例如,我们可以传递要打开的文件的文件名.比如说
javaws [options] http://example.org/launch.jnlp my_file.jpg
Run Code Online (Sandbox Code Playgroud)
在JNLP中使用硬编码的参数不满足此用例.
我正在创建一个Web Start应用程序,它将受益于一些较新的JVM选项(特别是转义分析,G1垃圾收集器等)
同时,我希望应用程序能够在不支持这些选项的旧JVM上正常工作.
有没有一个很好的方法来实现这一目标?
我创建了一个简单的测试用例来测试Java 9 Web Start的新模块.遗憾的是,Java 9 Web Start默认情况下不支持像常规Java 9那样的--permit-illegal-access.
Java 9 Web Start假设支持--add-opens(请参阅https://bugs.openjdk.java.net/browse/JDK-8172986).
我正在使用Java 1.9.0_181_ea.
这是我的测试类:
import java.awt.Toolkit;
import java.lang.reflect.Method;
import java.lang.IllegalAccessException;
import java.lang.reflect.InvocationTargetException;
public class Java9BreaksWhenTest {
public static void main(String args[]) throws IllegalAccessException, InvocationTargetException {
System.out.println("Hello World");
// Do some dangerous reflection
Toolkit toolkit = Toolkit.getDefaultToolkit();
Class c = toolkit.getClass();
while(true) {
Method m = null;
try {
m = c.getDeclaredMethod("setDesktopProperty", String.class, Object.class);
} catch (NoSuchMethodException ex) {
c = c.getSuperclass();
if (c!=null)
continue;
} catch (SecurityException …Run Code Online (Sandbox Code Playgroud) 我的 Java Webstart 应用程序在受控的可信环境中运行。这是一个封闭的内部网络,我可以在其中控制应用程序的启动方式。
我如何将 JVM 参数传递给应用程序,即使它们被 JVM 视为“不安全”以供 webstart 使用?