Я просмотрел всю сеть и не нашел решения своей проблемы.Для проекта AP Comp Sci я делаю набор игр, которые будут запускаться из JFrame с JButtons.У меня все игры готовы, а также слушатели действий, но игры не запускаются должным образом.JFrame и JButtons все также настроены правильно.
private static class TetListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
GameCenter.quit();
GameCenter.startTetris();
}
}
GameCenter.quit () ничего не делает, кроме запуска JFrame.dispose () и GameCenter.startTetris ();создает новый объект Tetris, затем запускает метод play (), чтобы начать игру.Весь Tetris закодирован правильно и работает правильно, когда он запускается в основном методе (вне actionlistener).Но как только я помещаю его в ActionListener, он не может быть правильно создан.Я отследил проблему до:
public BlockDisplay(BoundedGrid<Block> board)
{
this.board = board;
grid = new JPanel[board.getNumRows()][board.getNumCols()];
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
SwingUtilities.invokeLater(new Runnable() // <<<<<<<<<<------------------- Problem Here
{
public void run()
{
createAndShowGUI(); // <<<<<<<<<<<<-------- Never Run
}
});
//Wait until display has been drawn
try
{
while (frame == null || !frame.isVisible()) // <<<<<<<-------- Never Resolved
{
Thread.sleep(1);
}
}
catch(InterruptedException e)
{
e.printStackTrace();
System.exit(1);
}
}
Так что программа всегда зависает.Я также создал игру Pacman, которая использует этот SwingUtilities.invokeLater, поэтому он тоже не работает.Я не могу понять, почему это происходит или как это исправить.
Любая помощь приветствуется.Дайте мне знать, если вам нужна дополнительная информация.