У меня есть сценарий, в котором мне нужно, чтобы мой пользовательский интерфейс Swing работал в двух разных потоках. У меня есть ноутбук, на котором будет работать мое приложение. Есть кнопка, при нажатии которой презентация должна начинаться на другом экране, подключенном к моему ноутбуку.
Теперь я сделал презентацию класса, которая расширяет SwingWorker, считывает изображения из папки и отображает их на экране.
class Presenatation extends SwingWorker<Integer, Integer> {
@Override
protected Integer doInBackground() throws Exception {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
start(outputFolder, screenVO);/*Creates a JFrame to be displayed
on new screen and sets a JPanel to it. Reads the file images sets it into
JLabels every 2 seconds and updates it to Japnel*/
}
});
return null;
}
Внутри моего метода запуска у меня есть код для чтения изображений и отображения их в пользовательском интерфейсе.
Я считаю, что этот подход неверен, поскольку мой SwingWorker не должен вызывать invokeLater в doInBackground ()
Судя по тому небольшому количеству знаний, которые у меня есть, должно получиться что-то вроде этого:
@Override
protected Void doInBackground() throws Exception
{
return null;
}
@Override
protected void process(List<Integer> chunks
{
}
Я не могу решить, какую часть где разместить?
Мне нужно сделать следующее:
- Начать новый фрейм для отображения на новом экране
- Загружать изображения в кадр каждые 2 секунды считывая изображение из папки
- Правильный ли этот подход - расширение класса Presentation до SwingWorker? Поскольку внешне у меня есть объект Executor, в exec () которого я передаю объект Presentation
Помогите, пожалуйста !