【发布时间】:2014-01-09 19:40:39
【问题描述】:
这是一个 main 函数的内容,当打印行被注释时它会阻塞,但是当打印行被取消注释时它会按预期执行。
为什么单个打印行会改变整个 while 循环的行为? (在完全不执行和成功完成之间。)这是可重复的,我可以多次注释和取消注释该行,我得到相同的结果:它仅在取消注释打印时才有效。
对 print 调用的这种奇怪效果有什么合理的解释吗?
MainGUI.main(args);
DeviceManager device = DeviceManager.getInstance();
MainGUI gui = null;
while(true){
if(device.getGui() != null){
gui = laser.getGui();
if(gui.isLoaded()){
gui.getMainView().getFrame().setLocation(0, 0);
break;
}
}
// System.out.print("");
}
【问题讨论】:
-
我猜你的
System.out.println行在while(true)代码块之外,否则代码中还有其他原因。 -
@LuiggiMendoza:不,它在里面。它在两个 if() 块之外,但仍在 while() 内
-
使用调试器找出循环阻塞的位置,以及阻塞的位置。一切都会揭晓。
-
我猜 print 调用会刷新缓存或以其他方式导致系统的内部状态发生变化,迫使它再次实际执行 device.getGui() 测试,最终允许它进入内部代码并中断。
-
@MarcB 我知道里面的这段代码,但可能是一个错字。