Вызовите метод в классе, который реализует runnable - PullRequest
0 голосов
/ 26 января 2019

Пытаясь создать генератор лабиринта, чтобы заставить работать 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();
            }
        });
    }

Как бы мне просто перезапустить поток?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...