等待用户输入继续

时间:2012-12-08 22:33:22

标签: java button input wait

好的,所以我在这里看到了很多这样的问题,但是所提供的答案似乎都不适用于我的具体案例。

我有一个分为两部分的游戏模拟程序;我首先编写了实际的功能,然后是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>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

多线程方法可能仍然是最简单的方法。如果你实际上并不需要程序逻辑在对话框出现时继续运行,并且不介意需要一个零速度增加的额外线程,你可以在你的实际游戏逻辑类中使用一个名为waitforinput()的函数只是你在GUI线程上调用一些东西后就扔掉了。看起来像这样:

waitForInput()
{
   while(gotInput==false)
   {

   }
   gotInput=false;
   return;
}

然后让你的GUI类在完成应该恢复游戏的内容时翻转输入变量。它不漂亮,但它很简单,应该适合你的目的。