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

javafx以编程方式为虚拟键盘设置参数,javafx,keyboard,touch,virtual,dcom,Javafx,Keyboard,Touch,Virtual,Dcom,我有一个桌面应用程序,将在没有键盘的计算机上使用,输入将在触摸屏上。从eclipse运行时,我可以使虚拟键盘在文本字段上显示良好。我使用了这些论点 -Dcom.sun.javafx.touch=true -Dcom.sun.javafx.isEmbedded=true -Dcom.sun.javafx.virtualKeyboard=none 下面的链接显示了在何处添加参数。 当我创建一个可运行的jar文件时,键盘不会显示。我正在寻找一种以编程方式设置这些参数的方法,以便runnable

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

-Dcom.sun.javafx.touch=true 
-Dcom.sun.javafx.isEmbedded=true 
-Dcom.sun.javafx.virtualKeyboard=none
下面的链接显示了在何处添加参数。


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

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

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

我能找到的唯一有效的解决办法就是从这里

在调用应用程序的原始main方法之前,创建一个包装类并设置系统属性

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);
    }
}
公共类MainWrapper{
公共静态void main(字符串[]args)引发异常
{//应用程序-包名称
Class app=Class.forName(“application.Main”);
方法main=app.getDeclaredMethod(“main”,字符串[].class);
System.setProperty(“com.sun.javafx.isEmbedded”、“true”);
System.setProperty(“com.sun.javafx.touch”、“true”);
System.setProperty(“com.sun.javafx.virtualKeyboard”、“javafx”);
对象[]参数=新对象[]{args};
调用(null,参数);
}
}

在创建可运行的jar文件时,只需指向启动配置的MainWrapper类。

我能找到的唯一可行的解决方案就是从这里开始的

在调用应用程序的原始main方法之前,创建一个包装类并设置系统属性

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);
    }
}
公共类MainWrapper{
公共静态void main(字符串[]args)引发异常
{//应用程序-包名称
Class app=Class.forName(“application.Main”);
方法main=app.getDeclaredMethod(“main”,字符串[].class);
System.setProperty(“com.sun.javafx.isEmbedded”、“true”);
System.setProperty(“com.sun.javafx.touch”、“true”);
System.setProperty(“com.sun.javafx.virtualKeyboard”、“javafx”);
对象[]参数=新对象[]{args};
调用(null,参数);
}
}

当创建可运行jar文件时,只需指向启动配置的MainWrapper类。

Hi,我已经尝试过了,但它从来没有对我起作用。我不确定,但在应用程序运行之前,参数可能不会生效。不过我刚刚找到了一个有效的解决办法。。这可能是一个变通方法,创建另一个类,一个将设置这些参数的包装类,然后启动主类。谢谢你的快速回复。嗨,我已经试过了,但对我来说从来都不起作用。我不确定,但在应用程序运行之前,参数可能不会生效。不过我刚刚找到了一个有效的解决办法。。这可能是一个变通方法,创建另一个类,一个将设置这些参数的包装类,然后启动主类。谢谢你的快速回复。