javafx以编程方式设置虚拟键盘

时间:2016-08-02 23:05:13

标签: javafx keyboard touch virtual dcom

我有一个桌面应用程序,将在没有键盘的计算机上使用,输入将在触摸屏上。从eclipse运行时,我可以让虚拟键盘显示在文本字段上。我使用了这些论点

-Dcom.sun.javafx.touch=true 
-Dcom.sun.javafx.isEmbedded=true 
-Dcom.sun.javafx.virtualKeyboard=none

以下链接显示了我添加参数的位置。 how to add command line parameters when running java code in Eclipse?

当我制作一个可运行的jar文件时,键盘没有显示出来。我正在寻找一种以编程方式设置这些参数的方法,以便runnable jar文件将在任何计算机上显示虚拟键盘。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

JVM的-D选项设置系统属性。因此,您可以通过执行以下操作来实现相同目的:

public class MyApplication extends Application {

    @Override
    public void init() {
        System.setProperty("com.sun.javafx.touch", "true");         
        System.setProperty("com.sun.javafx.isEmbedded", "true");        
        System.setProperty("com.sun.javafx.virtualKeyboard", "none");
    }

    @Override
    public void start(Stage primaryStage) {
        // ...
    }
}

答案 1 :(得分:1)

我能找到的唯一可行的解​​决方案来自这里 Gradle build for javafx application: Virtual Keyboard is not working due to missing System property

创建包装类并在调用应用程序原始主方法之前设置系统属性。

public class MainWrapper {

    public static void main(String[] args) throws Exception 
    {  // application - package name
        Class<?> app = Class.forName("application.Main");         
        Method main = app.getDeclaredMethod("main", String[].class);     
        System.setProperty("com.sun.javafx.isEmbedded", "true"); 
        System.setProperty("com.sun.javafx.touch", "true");          
        System.setProperty("com.sun.javafx.virtualKeyboard", "javafx");     
        Object[] arguments = new Object[]{args};
        main.invoke(null, arguments);
    }
}

制作runnable jar文件时,只需指向启动配置的MainWrapper类。