У меня есть приложение с JavaFX Stage и SWT Shell. На этапе JavaFX существуют контроллеры, которые изменяют свойства виджетов SWT в командной консоли и некоторых контроллеров JaveFX, информирующих об изменениях в виджетах SWT. Конечно, все с JavaFX должно происходить в потоке приложения JavaFx, и все с SWT-виджетами должно происходить в потоке SWT.
Сначала я попытался создать по одному потоку для каждого и переключать поток при каждом переключении контекста. это было очень раздражающим, и я решил больше не следовать этому подходу. Вместо этого создайте окно SWT внутри потока приложения JavaFX, чтобы два интерфейса пользователя работали в одном потоке. Все работает нормально, за исключением одной вещи:
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
SWT нуждается в этом фрагменте, в противном случае ни один из виджетов не реагирует на события, и SWT требует, чтобы это было в том же потоке, как и все остальное. Но этот фрагмент блокируется, поэтому, как только я его использую, JavaFX зависает.
Я знаю, что наличие окон SWT и JavaFX, вероятно, очень странный вариант использования, но есть ли решение для этого?
Просто чтобы уточнить: