JavaFX без использования потока в классе - PullRequest
0 голосов
/ 03 июля 2018

Пока что во всех примерах JavaFX, которые я видел, в коде используется некоторая форма потока, независимо от того, идет ли речь о расширении Application или выполнении:

SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            initAndShowGUI(); //arbitrary function
        }
    });

в основном методе. Мне было интересно, можно ли было избежать всего этого и создать отдельный класс JavaFX, который можно вызывать в основном классе. (Основной класс использует поток).

Например, я пытаюсь нарисовать несколько плиток и затем использовать PerspectiveCamera. Однако я хочу, чтобы созданная проекция / представление было записано в отдельном классе, а затем вызвать экземпляр этого класса в главном классе.

1 Ответ

0 голосов
/ 06 июля 2018

Если ваш код касается / инициализирует компонент JavaFX, то он должен использовать поток платформы JavaFX. Обойти это невозможно, для этого нужно , чтобы JavaFX работал правильно (в противном случае вы, вероятно, столкнетесь со всевозможными странными ошибками, связанными с потоками).

Это также относится и к Swing, хотя в JavaFX это имеет тенденцию применяться гораздо тщательнее, за исключением исключений, возникающих при касании чего-либо из неправильного потока. Это хорошая вещь, так как это отсутствие принуждения может быть кошмаром в больших проектах свинга - вы можете легко потратить дней , отслеживая источник ошибки до точки, где Операция пользовательского интерфейса выполнялась не в том потоке, и не было выдано предупреждение.

Существует одна (экспериментальная) опция виртуальной машины, которую вы можете передать (-Djavafx.embed.singleThread=true), которая объединяет потоки платформы Swing и JavaFX, поэтому вам не нужно слишком много переходить между потоками пользовательского интерфейса, если вы используя оба набора инструментов. Однако используйте это в рабочем коде на свой страх и риск.

...