我的线程有问题...我设法启动线程,程序执行它应该执行的操作,但直到 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 方法运行时才绘制。
谁能帮帮我?
亲切的问候,亨宁
最佳答案
即使它是一个Runnable
,run()
方法也只是一个普通方法。您需要启动一个线程来执行您的可运行程序。
替换
if(runSudoku.boardSize > 8) {
r.run();
}
由
if(runSudoku.boardSize > 8) {
new Thread(r).start();
}
关于java - gui 中新线程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22858434/