Пытаясь создать генератор лабиринта, чтобы заставить работать repaint()
, мне пришлось добавить swingUtilities.invokeLater
в main и заставить графический класс реализовать Runnable с new Thread(this).start();
в конструкторе.
Однако я хочу, чтобы лабиринт восстанавливался при нажатии кнопки, которая находится в классе кнопок.
Кажется, что простой вызов метода из другого класса работает, поскольку println
все еще печатает, но на панель ничего не перерисовывается, изменение размера окна также ничего не меняет.
Я пытался создать новый поток, используя приведенный ниже код, но происходит то же самое?
MazeArea ma = new MazeArea();
Thread t = new Thread(ma);
t.start();
Основной класс
public class MainGenerator {
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// executes code
}
});
}
}
Графический класс
public class MazeArea extends JComponent implements Runnable {
public MazeArea() {
new Thread(this).start();
}
public void run() {
generateMaze();
clear();
}
synchronized protected void paintComponent(Graphics g) {
super.paintComponent(g);
drawMaze(g);
}
}
Кнопка класса
public class VariableDetails extends JPanel {
public VariableDetails() {
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
MazeArea ma = new MazeArea();
Thread t = new Thread(ma);
t.start();
}
});
}
Как бы мне просто перезапустить поток?