Я узнал о том, что качание не является потокобезопасным. Углубившись глубже, я обнаружил, что каждая модификация компонента Swing должна выполняться в потоке диспетчеризации событий, чтобы предотвратить различные проблемы, связанные с многопоточностью. Однако информация, казалось, полностью остановилась на этом. Похоже, не существует хорошего учебника, который объясняет, как это сделать в любом месте, доступном в Интернете.
Собирая воедино информацию из кода, размещенного в связи с другими проблемами, казалось, что мне придется помещать неопрятный блок кода вокруг каждой отдельной модификации колебания в моей программе (как этот пример из моего собственного кода):
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
setTitle("Frame title");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setSize(800, 480);
setLocationRelativeTo(null);
setIconImage(Toolkit.getDefaultToolkit().createImage(ClassLoader.getSystemResource("Frame icon.png")));
}
});
} catch (Exception e) {
e.printStackTrace();
}
По сути, это правильно? Нужно ли размещать этот код (или эквивалент с invokeLater) вокруг каждой модификации компонента Swing в моем коде?
Кроме того, почему Swing не делает это автоматически?