尝试创建一个迷宫生成器,以使repaint()
正常工作,我必须在主目录中添加swingUtilities.invokeLater
,并使图形类在构造函数中使用new Thread(this).start();
实现Runnable。
但是,我希望迷宫在按钮类中单击时重新生成。
简单地从另一个类调用该方法似乎可以工作,因为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();
}
});
}
我将如何重新运行线程?