javafx программно устанавливает аргументы для виртуальной клавиатуры

У меня есть настольное приложение, которое будет использоваться на компьютерах без клавиатуры, ввод будет осуществляться на сенсорном экране. Я могу заставить виртуальную клавиатуру нормально отображаться в текстовых полях при запуске из eclipse. Я использовал эти аргументы

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

Следующая ссылка показывает мне, где добавить аргументы. как добавить параметры командной строки при запуске java-код в Eclipse?

Когда я создаю исполняемый файл jar, клавиатура не появляется. Я ищу способ установить эти аргументы программно, чтобы исполняемый файл jar отображал виртуальную клавиатуру на любом компьютере. Любая помощь будет оценена.


person Colm O S    schedule 02.08.2016    source источник


Ответы (2)


Параметр -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) {
        // ...
    }
}
person James_D    schedule 03.08.2016
comment
Привет, я уже пробовал это, но это никогда не работало для меня. Я не уверен, но аргументы не вступают в силу до запуска приложения. Я только что нашел рабочее решение. Это может быть обходной путь: создайте еще один класс, класс-оболочку, который установит эти аргументы, а затем запустит основной класс. stackoverflow.com/questions/32373313/ - person Colm O S; 03.08.2016
comment
Спасибо за быстрый ответ. - person Colm O S; 03.08.2016

Единственное рабочее решение, которое я смог найти, пришло отсюда -miss">Сборка Gradle для приложения javafx: виртуальная клавиатура не работает из-за отсутствия системного свойства

Создайте класс-оболочку и задайте системные свойства перед вызовом исходного основного метода приложения.

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 для конфигурации запуска.

person Colm O S    schedule 03.08.2016