java - gui 中新线程的问题

标签 java multithreading swing sudoku

我的线程有问题...我设法启动线程,程序执行它应该执行的操作,但直到 gui 的主绘画启动后它才启动。 这是我的代码;

public void getFile() {
    Runnable r = new Runnable() {
        public void run() {
            viewTimeBar();
        }
    };

    try {
        JFileChooser fileChooser = new JFileChooser();
        int returnVal = fileChooser.showOpenDialog(this);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            runSudoku = new RunSudoku(fileChooser.getSelectedFile().getName(), 0);
        }
        if(runSudoku.boardSize > 8) {
            r.run();
        }
        runSudoku.runBoard();

        printBoard(runSudoku.sudokuBoard, 0);
        getNextSolution.setText("Solutions: " + (runSudoku.validBoards.size()) + ", press get solution");
        getSolution.setEnabled(true);

    } catch(Exception e) {
        printError();
    }
}

public void viewTimeBar() {
    if(sudokuPanel != null) {
       remove(sudokuPanel);
    }

    JPanel timer = new JPanel();
    JLabel pleaseWait = new JLabel("Please wait while we try to find solutions!", SwingConstants.CENTER);
    timer.add(pleaseWait, BorderLayout.NORTH);

    JProgressBar progressBar = new JProgressBar();
    progressBar.setSize(10, 400);
    progressBar.setIndeterminate(true);
    progressBar.setStringPainted(true);
    timer.add(progressBar, BorderLayout.CENTER);
    timer.setVisible(true);
    add(timer, BorderLayout.SOUTH);
    validate();
}

如果棋盘尺寸大于 8,则可运行程序应启动 viewTimeBar,但直到 printBoard 方法运行时才绘制。

谁能帮帮我?

亲切的问候,亨宁

最佳答案

即使它是一个Runnablerun()方法也只是一个普通方法。您需要启动一个线程来执行您的可运行程序。

替换

    if(runSudoku.boardSize > 8) {
        r.run();
    }

    if(runSudoku.boardSize > 8) {
        new Thread(r).start();
    }

关于java - gui 中新线程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22858434/

相关文章:

java 。防止按钮变大

java - 使用Java绘图: Applying Borders/Outlines to Shapes

windows - 仅在一个处理器上运行的进程是否可以在其他处理器上运行线程?

java - 线程中出现异常 "AWT-EventQueue-0"java.lang.NullPointerException 错误,该怎么办?

java - 请推荐有关线程和并发的好书/网站?

java - 如何使用apache common从CSV文件中读取列的值而不遍历java中的行

Python3-Pyqt5如何通过异常或按退出按钮结束线程中的循环

c# - 为什么我的并行任务代码无法达到100%的CPU使用率?

java - 在Java中获取jLabel图像url

java - 使用 Swing 设置选定的文本颜色