【发布时间】:2011-05-20 08:45:44
【问题描述】:
我浏览了整个网络,但没有找到解决问题的方法。对于 AP Comp Sci 项目,我正在制作一组游戏,这些游戏将从带有 JButton 的 JFrame 运行。我已经准备好游戏以及动作监听器,但是游戏无法正常启动。 JFrame 和 JButton 也都设置正确。
private static class TetListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
GameCenter.quit();
GameCenter.startTetris();
}
}
GameCenter.quit() 只运行 JFrame.dispose() 和 GameCenter.startTetris();构造一个新的俄罗斯方块对象,然后运行 play() 方法开始游戏。所有的俄罗斯方块都被正确编码并且当它在主方法中运行时(在动作监听器之外)可以正常工作。但是一旦我把它放在 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);
}
}
所以程序总是挂起。我还制作了一个使用这个 SwingUtilities.invokeLater 的 Pacman 游戏,所以它也不起作用。我无法弄清楚为什么会发生这种情况或如何解决它。
感谢任何帮助。如果您需要更多信息,请告诉我。
【问题讨论】:
-
public BlockDisplay(BoundedGrid<Block> board)有没有被调用过? -
是的。俄罗斯方块可以完美运行,并且在 ActionListener 之外也应该如此。
标签: java swing actionlistener