我遇到线程问题...我设法启动线程并且程序执行它应该执行的操作,但它不会启动直到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,则可运行的shoud启动viewTimeBar,但它不会绘制,直到printBoard方法运行。
任何可以帮助我的人?
亲切的问候,亨宁
答案 0 :(得分:1)
即使它是一个Runnable
,run()
方法也只是一种常规方法。你需要启动一个执行runnable的线程。
替换
if(runSudoku.boardSize > 8) {
r.run();
}
通过
if(runSudoku.boardSize > 8) {
new Thread(r).start();
}