在 JVM 上设置默认参数
Posted
技术标签:
【中文标题】在 JVM 上设置默认参数【英文标题】:Setting default arguments on JVM 【发布时间】:2018-07-02 09:32:57 【问题描述】:我正在为嵌入式系统开发 javafx 应用程序。 (WIN 7 EMB, JAVA 8)
本系统为触控式(无键盘)但JVM默认未设置虚拟键盘
如何在 JVM 上设置一次并明确地设置这个参数?
-Dcom.sun.javafx.isEmbedded=true
-Dcom.sun.javafx.touch=true
-Dcom.sun.javafx.virtualKeyboard=javafx
感谢您的帮助!
【问题讨论】:
见:***.com/questions/1754077/… Ty mate...但是我在发布之前已经进行了搜索....这个解决方案不起作用!我可能会使用外部启动器解决这个问题... 你能确认 main 方法确实被调用了吗? IIRC 在某些情况下,如果主类扩展Application
,JVM 可能会跳过 main
方法。参见例如docs.oracle.com/javase/8/javafx/get-started-tutorial/…(图 3-1 之前的最后一个项目符号)和 docs.oracle.com/javase/9/tools/java.htm#JSWOR624(在“描述”下)
确认,我通过包装我的主要找到了解决方案,我将自己发布解决方案
这是一个假的,已经找到的解决方案在 IDE (eclipse) 中运行良好,但不适用于 jar 可执行文件
【参考方案1】:
在调用 Application.launch(...)
之前,JavaFX 不会初始化。
您应该尝试设置系统属性,例如,在您的 main(String[] args)
方法中:
public static void main(String[] args)
System.setProperty("com.sun.javafx.isEmbedded", "true");
System.setProperty("com.sun.javafx.touch", "true");
System.setProperty("com.sun.javafx.virtualKeyboard", "true");
launch(args); // launch JavaFX
【讨论】:
嗨 turikhay,对不起,但不能在 java 8 上工作,我不确定,但我认为因为 jvm 在启动 main 之前需要这个参数.....这是我的主要 -> 它不工作 public static void main(String[] args) System.setProperty("com.sun.javafx.isEmbedded", "true"); System.setProperty("com.sun.javafx.touch", "true"); System.setProperty("com.sun.javafx.virtualKeyboard", "true");启动(参数); 它有!只是我需要 2 个 main 让它正常工作......一个用于在设置 JVM 设置后启动第二个 main【参考方案2】:最后,我找到了一个类似的解决方案,在启动我原来的 main 之前,将我的 main 包装在另一个设置 jvm prop 的方法中
package launcher;
import application.Main;
public class myLauncher
public static void main(String[] args)
Main.main(null);
这是主要的
public static void main(String[] args)
System.setProperty("com.sun.javafx.isEmbedded", "true");
System.setProperty("com.sun.javafx.touch", "true");
System.setProperty("com.sun.javafx.virtualKeyboard", "javafx");
launch(args);
(在 jar 导出工作时需要标记 ->“在生成的 jar 中提取所需的库”!)
很抱歉,我对此解决方案没有明确的解释!
【讨论】:
真的需要通过反射找到方法吗?似乎过于复杂且容易出错,尤其是因为该类是硬编码的。为什么不直接打电话给application.Main.main(arguments)
?
这是个好主意,无论如何我还有另一个问题...虚拟键盘可以通过 IDE 很好地启动,但不能从 jar......这令人沮丧...
另一个更新:通过提示启动应用程序后,我已经拦截了此异常-->images/vk-light.png 线程“JavaFX 应用程序线程”java.lang.NullPointerException 中的异常:图像不能为空--> 好像没有找到虚拟键盘的图像
最后,使用“在生成的 jar 中提取所需的库”标志它可以工作!我将再花 1 天的时间进行测试并将重构这篇文章......我认为 jvm 在解决虚拟键盘 imgs 的 uri 时遇到了问题(但我不确定)以上是关于在 JVM 上设置默认参数的主要内容,如果未能解决你的问题,请参考以下文章