Использование JavaFX Platform.runLater и доступ к пользовательскому интерфейсу из другого потока

У меня есть несколько вопросов о Platform.runLater. У меня есть класс приложения JavaFX. В этом классе я запускаю поток (поток читает данные из сетевого сокета).

Теперь, когда я создаю новый Stage внутри потока, система выдает исключение (поток диспетчера событий JavaFX и мой поток чтения netork не совпадают) - я понимаю это поведение.

Но с другой стороны, я добавляю текст из сетевого ридера в существующий TextArea или добавляю / удаляю некоторые элементы в ListView<String> - это не исключение - почему? Я думал, что JavaFX является однопоточным (часть библиотеки пользовательского интерфейса). Это то же самое, что и в Swing: иногда это работает, а иногда у вас просто мусор (потому что EDT)?

Мои вопросы:

  • Когда поток диспетчера событий JavaFX бросает исключение, а когда нет?
  • Есть ли какие-нибудь хорошие документы по этому поводу
  • Существует ли более простой (более короткий и понятный) способ использования Platform.runLater с помощью метода run()? В сочетании с try catch (или множественным catch) это выглядит очень странно

Я знаю, что использование Platform.runLater в потоке не так уж хорошо (дизайнерское решение)

8
задан swaechter 1 March 2013 в 04:11
поделиться