【发布时间】:2017-05-12 04:30:53
【问题描述】:
这是我的java代码。
CameraFrame cf = new CameraFrame();
while (true) {
// System.out.println("hello");
if(cf.cp.play) {
AppGameContainer app = new AppGameContainer(new Game("Snake"));
app.setDisplayMode(WIDTH, HEIGHT, false);
app.setTargetFrameRate(FPS);
app.setShowFPS(false);
app.start();
}
}
由于某种原因,这永远不会在 java 中运行。我确实在某处读到过诸如 Java 和 C# 之类的编程语言通过不执行此类循环来优化代码(据说这些循环没有用处)。但是我有来自(slick2d 游戏库)的代码,它从未在这里运行。但是,如果我输入 System.out.println 声明,一切都很好。
所以我的问题是,如何在不使用 System.out.println 行的情况下诱导这个 while 循环运行。
注意:我完全理解无限循环是不好的,但在游戏或服务器中可能存在无限循环可能是唯一最好的方法。
编辑:
我已经更新了代码。 CameraFrame 基本上是另一个线程,它打开视频并将其显示在 JFrame 上,cf.cp 是 JPanel,cf.cp.play 是布尔值,由 CameraFrame 上的 JButton 触发。所以我有一个 JFrame,它有一个 JButton,应该能够从 slick2d 触发这个新窗口。
【问题讨论】:
-
你可以在 Java 中做到这一点。我认为您可能有其他代码阻止它执行。愿意分享更多内容吗?
-
是什么让您认为它没有运行?
-
你的循环什么也不做,因为
cf.cp.play是假的。如果你想让你的线程看到它的变化,它必须是volatile。 -
我们不需要测试它;很明显。循环不会随机执行失败。
-
带有无限循环的简单 main 不会终止。正如@shmosel 建议的那样,除非是
volatile,否则您的cpu 密集型循环不会看到cf.cp.play的值发生变化。
标签: java optimization while-loop infinite-loop