【发布时间】:2018-03-05 20:52:45
【问题描述】:
我正在完成我的第一场比赛,但在玩家输掉比赛时返回主菜单时遇到问题。
主(游戏)类:
public static void main(String[] args) throws InterruptedException {
Main main = new Main();
这是将菜单添加到我的框架的位置。菜单本身就是 带有图形和鼠标监听器的 JComponent:
main.setMenu();
while (true) {
menuChoice = meny.getDecision();
if (i == 0 && menuChoice == 2) {
main.run(cp);
} else if (i > 0) {
main.run(cp1);
} else if (menuChoice == 0) {
System.exit(0);
}
public void run(Computer cp) throws InterruptedException {
if (time == 0) {
这是我的框架获取游戏背景等的地方:
setWindow(data, player, cp);
time++;
}
//Here's a bunch of irrelevant ifs
} if (cpScore.returnScore() == 10 && time > 0) {
您应该在此处返回主菜单。需要做什么 这里基本上是 mainmethod 在绝对值时所做的 开始(添加一个 Mainmenu 框架,用于进一步输入 说明)。
}
}
有什么想法吗?
【问题讨论】:
-
“菜单本身是一个带有图形和鼠标监听器的 JComponent:” - 你是在无限的
while-loop中执行此操作的。如果这是在事件调度线程的上下文中执行的,那么您将阻止它并阻止更新 UI。如果您不是在事件调度线程的上下文中执行此操作,那么您就违反了 API 的单线程性质 - 无论哪种方式 - 这都是一团糟 -
@MadProgrammer 如果我理解正确的话,它使用主线程。这应该是我的问题的问题吗?除了它不应该使用主线程的事实;我已经使用 Java 一个月了,所以我还没有瞄准完美的代码。
-
Swing 不是线程,只是单线程。如果您尝试从 EDT 上下文之外对 UI 执行操作,则会面临竞争条件和其他可能导致 UI 行为不正常的问题的风险
-
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
标签: java swing jframe jcomponent pong