2016-08-02 113 views
0

我有一个桌面应用程序,将在没有键盘的计算机上使用,输入将在触摸屏上。从eclipse运行时,我可以使虚拟键盘显示在文本框上。我使用了这些参数javafx以编程方式为虚拟键盘设置参数

-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文件时,键盘不显示出来。我正在寻找一种以编程方式设置这些参数的方法,以便可运行jar文件将在任何计算机上显示虚拟键盘。任何帮助将不胜感激。

回答

0

唯一可行的解​​决方案,我可以找到这里 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); 
    } 
} 

当使可运行jar文件指向启动配置的MainWrapper类时。

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

嗨,我试过了,但它从来没有为我工作。林不知道,但参数运行应用程序之前,也许不会生效。我刚刚发现了一个工作解决方案,但它可能是一个解决方法,创建另一个类,一个包装类,它将设置这些参数,然后启动主类。 http://stackoverflow.com/questions/32373313/gradle-build-for-javafx-application-virtual-keyboard-is-not-working-due-to-miss –

+0

感谢您的快速回复。 –