javafx programmatically set arguments for virtual keyboard

人走茶凉 提交于 2020-01-03 05:36:08

问题


I have a desktop application that will be used on computers with no keyboard, input will be on a touch screen. I can get the virtual keyboard to show up on textfields fine when running from eclipse. I used these arguments

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

The following link shows me where to add the arguments. how to add command line parameters when running java code in Eclipse?

When I make a runnable jar file the keyboard does not show up. I am looking for a way to set these arguments programmatically so that the runnable jar file will display the virtual keyboard on any computer. Any help will be greatly appreciated.


回答1:


The -D option to the JVM sets a system property. So you can achieve the same by doing the following:

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) {
        // ...
    }
}



回答2:


The only working solution I could find came from here Gradle build for javafx application: Virtual Keyboard is not working due to missing System property

Create a wrapper class and set the system properties before invoking the applications original main method.

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);
    }
}

When making the runnable jar file just point to the MainWrapper class for the launch configuration.



来源:https://stackoverflow.com/questions/38731833/javafx-programmatically-set-arguments-for-virtual-keyboard

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!