powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX2: потокобезопасность
3 сообщений из 3, страница 1 из 1
JavaFX2: потокобезопасность
    #38850023
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо ли как-то специально работать с UI контролами из потока таски, если я только считываю данные и ничего не меняю?
UI при этом гарантированно заблокирован. Т.е. мышкой-клавой никто тыкать не будет.

Что-то толком нагуглить не получилось.

В swing я чтение данных из полей ввода делаю в EDT потоке. Вот думаю в JavaFX надо также?

Вот так нормально?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
private void generate() {
  lockUI(genLayerPnl, genPnl, prevBtn, nextBtn);

  Task<Void> task = new Task<Void>() {
    @Override protected Void call() throws Exception {
        // Обращение к полям ввода прямо из таски
        String outFolder = outFolderTf.getText(); 
        String pkg = pkgTf.getText();
        ...
    }
  };
  
  exec.submit(task);
}



Или надо делать вот так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
private void generate() {
  lockUI(genLayerPnl, genPnl, prevBtn, nextBtn);

  // Обращение к полям ввода до создания таски
  final String outFolder = outFolderTf.getText();
  final String pkg = pkgTf.getText();

  Task<Void> task = new Task<Void>() {
    @Override protected Void call() throws Exception {
        ... использование outFolder и pkg  ...
    }
  };
  
  exec.submit(task);
}



Метод generate() вызывается только из UI потока (клик по кнопке).
...
Рейтинг: 0 / 0
JavaFX2: потокобезопасность
    #38850063
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтение оно, как бы, безопасное. Но вроде как и рискованое. Мало ли там чего, может вдруг по первому чтению документ рендерится в строку? Поэтому лучше любые обращения выполнять в EDT, даже если они являются чтением.
Но, помимо этого, 2й вариант имеет слабую связь между логикой и View-слоем. Task при этом из View можно легко унести в бизнес-логику. Даже не сам Task, а его метод.
В то время как первый вариант это сильная зависимость между логикой и UI. При усложнении логики либо UI, их рефакторинг будет более болезненым, так как более сильная связь требует синхронизации изменений в обоих слоях.
...
Рейтинг: 0 / 0
JavaFX2: потокобезопасность
    #38850187
Alexey Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЧтение оно, как бы, безопасное. Но вроде как и рискованное.

Хорошо, так и сделаю.

Что понравилось в javaFx - так это, то что javaFx кидает эксепшен при попытке записи в другом (не EDT) потоке.
В swing приходилось специально исхитрятся через задание специального FailOnThreadViolationRepaintManager-а.
А тут тебе из коробки.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX2: потокобезопасность
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]