在实现可运行的类中调用方法

时间:2019-01-25 23:46:00

标签: java swing

尝试创建一个迷宫生成器,以使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();
            }
        });
    }

我将如何重新运行线程?

0 个答案:

没有答案