好的,所以我在这里看到了很多这样的问题,但是提供的答案似乎都不适用于我的特殊情况。
我有一个分两部分编写的游戏模拟程序;我首先编写了实际的功能,然后是 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++;
}
}
它工作得很好。但是,当我有一个我想使用而不是 JOptionPane 的 GUI 时,一切都会崩溃。GUI 有一个JPanel
包含一个JLabel
用于文本、一个JComboBox
用于列表选项和一个JButton
用于确认。我想做的是让程序有效地“暂停”,然后等待用户点击按钮,然后选择所选项目,将其放入select
并继续。
我不能像我最初尝试的那样将该方法分成两部分,因为除了将结果发送select
到第二部分之外,我还需要发送其他东西。
另外,从上面可能看不出来,但我在程序过程中用不同的方法做了大约 20 到 30 次,所以我真的需要一个通用的解决方案而不是快速修复。
我认为使用多个线程执行此操作可能会起作用,但我似乎无法做到这一点(主线程过早停止执行 - 按钮甚至没有显示为被点击),无论如何,我更喜欢更简单的东西.
此外,如果这不是很清楚,我真正想做的是在嵌入在 GUI 中的 JPanel 中模拟 JOptionPane 的 modal 属性,并使该方法在继续之前等待用户输入。
有任何想法吗?