java从动作监听器中启动游戏
我有一个用Java制作的21点游戏,我想通过点击一个按钮来表示游戏的开始。我所有的动作监听器都工作得很好,但问题在于,如果没有完全在actionPerformed方法中运行,我就无法想出如何启动游戏。显然,在actionPerformed方法中持续运行的函数将有效地禁用我的GUI的其余部分。下面是一段代码片段
go.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// START GAME SOMEHOW but must run outside of action listener
}
});
# 1 楼答案
这是一个有效的观察结果,表明您已经理解了使用Swing时的基本规则
你的游戏很可能是事件驱动的(如果我错了,请纠正我),因此按钮执行的操作应该只是将程序设置为新状态,等待进一步的事件。这并不需要花费时间,通常由EDT直接完成
当然,如果你想制作一个奇特的新游戏动画,需要在一个单独的线程中执行,在这种情况下,你只需从actionPerformed方法中启动动画线程(我建议使用SwingWorker),然后返回
在代码中,我想象它是这样的:
# 2 楼答案
我相信你想要扩展javax.swing.SwingWorker
非ui启动功能将在doInBackground中运行,done方法将在更新ui完成时被调用
javadoc类描述中甚至有一个例子,可以用启动中发生的事情的状态更新progressbar