2015-05-06 5 views
7

У меня есть многопоточное приложение Java Swing.Java Swing многопоточный доступ к JTextArea

Несколько потоков вызовут метод с записью на JTextArea через textArea.append("something"). Должен ли я обертывать его вот так:

SwingUtilities.invokeLater(new Runnable() { 
    @Override 
    public void run() { 
     textArea.append("something"); 
    } 
}); 

Или это просто обновление контента, и Swing будет выполнять правильную резьбу?

+3

Вызов 'JTextArea # append (...)' должен быть поставлен в очередь на поток событий Swing, чтобы работать безопаснее и лучше. –

+1

Подход, который у вас есть, - хорошее начало. Вопрос в том, в каком порядке происходят обновления? Если да, то у вас большая проблема на ваших руках;) – MadProgrammer

+0

На самом деле нет. У меня есть противоположный вопрос: вы имеете в виду порядок раскачки свинг или порядок вызова метода? Метод имеет счетчик, и он маркирует сообщения (журналы). Но вы имеете в виду, что Swing может отображать нумерованные сообщения в неправильном порядке? Итак, следует ли использовать такой обертку? – Luo

ответ

1

Как правило, любые обновления, которые вы делаете с Swing, и, в частности, все, что меняет состояние или компоновку элемента управления, должно выполняться из потока Swing.

В этом случае вы абсолютно правы, поэтому каждое обновление в invokeLater является правильным способом. Вы можете попробовать обновить свою собственную очередь или подобное, но когда Swing уже предоставил только необходимую вам функциональность, имеет смысл использовать его.

См JTextArea документацию: http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextArea.html

Где он говорит

Внимание: свинг не поточно. Для получения дополнительной информации см. Политику Swing Threading.

Где он говорит:

В общем свинг не поточно. Все компоненты Swing и связанные классы, если не указано иное, должны быть доступны в потоке диспетчеризации событий.

Метод JTextArea#append не имеет ничего документированного в нем, говорящего, что он безопасен для использования с другими потоками.

Смежные вопросы