2016-08-02 5 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?

Когда я делаю runnable jar file, клавиатура не отображается. Я ищу способ установить эти аргументы программным образом, чтобы файл runnable 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); 
    } 
} 

При создании файла runnable jar просто указывается класс MainWrapper для конфигурации запуска.

1

Параметр -D для JVM устанавливает системное свойство. Таким образом, вы можете достичь того же, выполнив следующие действия:

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

Спасибо за быстрый ответ. –