好的,所以我在这里看到了很多这样的问题,但是所提供的答案似乎都不适用于我的具体案例。
我有一个分为两部分的游戏模拟程序;我首先编写了实际的功能,然后是GUI来显示它。我想,当我完成时,我只是来回实现来电,让两人互相交谈。后端使用JOptionPane同时获取用户输入。
我的问题是,现在我想在GUI中显示内容,我无法弄清楚如何暂停程序的运行以等待发生。例如,我在原始版本中有这个:
private static void runAttackerTurn(Team off, Team def) {
int counter = 0;
while (counter < 4 && off.whoHasIt() != null) {
//Do some stuff
active = getActive(off, def, counter);
select = (String)JOptionPane.showInputDialog(null,
"Who Would " + active.getName() + " Like To Attack?" + "\n" +
off.whoHasIt().getName() + " has the ball",
"Turn " + turnCount + " - " + teamName + " Attacker Turn" ,
JOptionPane.INFORMATION_MESSAGE, null,
attackerOptions, attackerOptions[0]);
target = getTarget(off, def, select, counter);
attack((Forward)active, target);
//More stuff
counter++;
}
}
它运作得很好。但是,当我有一个我想要使用的GUI而不是JOptionPane时,它会崩溃。 GUI的JPanel
包含文本的JLabel
,列表选项的JComboBox
和要确认的JButton
。我想做的是让程序“暂停”,有效地等待用户点击按钮,然后选择所选项目,将其放在select
中继续。
我无法将方法分解为两个部分,正如我最初尝试的那样,因为我需要将除select
的结果之外的其他内容发送到第二部分。
另外,从上面可能不太明显,但是我在程序过程中用不同的方法做了大约二三十次,所以我真的需要一个通用的解决方案而不是快速修复。
我认为使用多个线程执行此操作可能会有效,但我似乎无法做到这一点(主线程停止执行得太早 - 按钮甚至没有显示出被点击)而且无论如何,我是喜欢更简单的东西。
另外,如果不是很清楚,我真正想要做的是在嵌入GUI的JPanel中模拟JOptionPane的模态属性,并使方法在继续之前等待用户输入。 / p>
有什么想法吗?
答案 0 :(得分:0)
多线程方法可能仍然是最简单的方法。如果你实际上并不需要程序逻辑在对话框出现时继续运行,并且不介意需要一个零速度增加的额外线程,你可以在你的实际游戏逻辑类中使用一个名为waitforinput()的函数只是你在GUI线程上调用一些东西后就扔掉了。看起来像这样:
waitForInput()
{
while(gotInput==false)
{
}
gotInput=false;
return;
}
然后让你的GUI类在完成应该恢复游戏的内容时翻转输入变量。它不漂亮,但它很简单,应该适合你的目的。