我有2节课。当您单击特定位置时,第一个类将布尔值转换为true,第二个类调用frame.removeAll()
和frame.add(new CanvasSelect())
如果第一个类中的布尔值为true。它似乎只检查一次布尔值。
有没有办法让第二个类不断检查第一个类中的布尔值?
答案 0 :(得分:3)
正如评论中所建议的那样,如果你真的想知道发生了什么,你真的需要发布(一个简化的版本)代码。我可以想到这可能发生的三个原因。
可能性1:您需要将布尔值标记为volatile
。如果此处存在多个线程,则如果该字段未标记为易失性字段,则其中一个线程可能会看到过时值。但是,听起来你正在进行GUI编程(可能是使用Swing),因此所有这些事件都应该发生在GUI事件线程中 - 因此我怀疑这是问题所在。尽管如此,它仍然值得一试。
可能性2:您正在根据布尔值设置事件处理程序,而不是检查事件处理程序中的布尔值。在这种情况下,该值只能读取一次(当设置ActionEventHandler时)而不是单击事件时。
可能性3:当您清除框架时,您也使用事件处理程序清除项目,并且您没有正确地重置它们。我认为这是最可能的问题。
答案 1 :(得分:1)
使用任何形式的忙碌等待(如另一个答案所示)是真的坏主意,它是一个编程anti-pattern(它应该只在非常特殊的情况下使用,比如低级CPU编程,当然也绝不用Java):
sleep
更好,但随后您的代码会对延迟做出更改。延迟时间越短,浪费的CPU功率越大。不过,这是一个糟糕的编程模式。如果没有代码片段或更详细的说明,目前尚不清楚您想要实现的目标。一些一般性的建议:
答案 2 :(得分:0)
你可以使用下面给出的代码片段,并将它们放入主题,它总是与主代码并行运行
while(true)
{
if(_val) //_val is your boolean variable
{
// your logic
}
Thread.sleep(100);
}
或者可以通过点击特定控件来引发事件,该控件检查_val
的值并执行操作