Безопасно ли создавать образ с помощью Swing? - PullRequest
2 голосов
/ 23 января 2012

Я хочу использовать этот фрагмент Swing для создания изображения из текстовой метки из приложения, не основанного на Swing (веб-служба, написанная с использованием Play Framework , если быть точным) .

Я никогда не использовал Swing и видел, что "это не безопасно для потоков". Относится ли это к минимальному коду, который я планирую запустить? Должен ли я синхронизировать доступ к этому коду?

Если я правильно понимаю ответы о Swing thread-safety , то если метод явно не говорит, что это безопасно, то это не ... и методы, которые я использую (в частности, BufferedImage.getGraphics() don ' Кажется, у меня есть этот кусок Javadoc). Так что, если не указано иное, я собираюсь синхронизировать.

Ответы [ 2 ]

2 голосов
/ 23 января 2012

«Не поточно-ориентированный» означает, что вы не должны получать доступ к одной и той же вещи из нескольких потоков одновременно.
Нет ничего плохого в том, чтобы запускать этот код в фоновом потоке, если вы не разделяете объектымежду потоками.

Обратите внимание, что большинство объектов (не относящихся к пользовательскому интерфейсу) являются поточно-ориентированными для работы только для чтения.

1 голос
/ 23 января 2012

РЕДАКТИРОВАТЬ : на самом деле вы можете вырезать все связанные с Swing части в своем "фрагменте Swing", поскольку вы действительно заботитесь только о части манипулирования изображениями, которая не имеет ничего общего с Swing.

Не беспокойтесь ни о чем: ваш код не многопоточный.

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

Поскольку вы просто используете некоторые методы из библиотеки Swing без EDT, это похоже на использование любого метода из обычной библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...