【问题标题】:Setting default arguments on JVM在 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

感谢您的帮助!

【问题讨论】:

  • 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 可执行文件

标签: java javafx jvm javafx-8 virtual-keyboard


【解决方案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 时遇到了问题(但我不确定)
猜你喜欢
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-17
  • 2012-10-28
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
相关资源
最近更新 更多