【发布时间】:2011-06-13 07:50:44
【问题描述】:
问题
我目前正在使用 Swing GUI 在 Java(在 Eclipse 中)构建 Game of Life 模拟器,作为大学项目的一部分。除了一个小缺陷之外,这一切进展顺利 -
它适用于我的上网本,但不适用于我尝试过的任何其他 PC。这是在 Ubuntu 下。
一些结构大纲 - 我有一个模型、一个视图和一个控制器。我还没有正确定义模型,但是我已经完成了视图(GUI 部分)并启动了控制器。 Controller通过Main方法运行,然后Controller在单独的线程中创建View类并进入while循环。
视图实现了从用户输入、鼠标点击等接收到的“订单”队列。控制器在 while 循环的迭代中从队列中挑选这些订单,并在必要时执行它们。
然而,虽然代码在我的上网本(最新版本,Java 1.6.0_20)上运行良好,但它在我的电脑(最新版本,Java 1.6.0_20)或大学电脑(karmic,以前的一些Java 版本)。一旦遇到“getNextCommand”方法,它就会停止。 没有错误,只是拒绝打印/遵守
源文件位于此处 - http://www.mediafire.com/?dfwtdkj1tdxd5xl 感兴趣的文件是 Controller 和 View。
示例
在视图中,我有这个功能:
public Command getNextCommand() {
System.out.println(commands.getFirst().id);
return commands.pop();
}
非常不言自明,当 Controller 调用 getNextCommand() 时,它会打印出是什么命令。
这是Controller中的while循环:
while(!stop) {
if (gui.hasCommand()){
order = gui.getNextCommand();
//System.out.println("Something");
//if(order.id.equals("stop")) { stop = true; }
}
}
这很好用。如您所料,它会在 getNextCommand 中打印。
尽管取消注释这两个语句中的任何一个,它都会突然停止工作。不再为您打印!
为什么会发生这种情况?为什么这可以在我的上网本上工作,但不能在我的电脑上工作? :C
补充说明
此外,如果我运行 Eclipse 生成的 .class 文件,它会打印(假设这两行已被注释掉)。如果我只是使用 javac 自己编译它们,则不会打印任何内容。
任何见解将不胜感激!
谢谢,
卢克。
编辑
如果我在调用 getNextCommand 时没有返回一个命令(一个简单的容器类,带有一个 id (String)、x,y (int) 和 value (int)),而是返回一个整数,则会出现同样的问题。或者别的什么。
【问题讨论】:
-
我没有答案,但你有我的同情!对于一种本应“编写一次,随处运行”的语言来说,绝非如此。
-
@ראובן:当您使用以非同步方式相互交互的多个线程时,请指出一种不会导致未定义行为的语言。
标签: java multithreading eclipse swing