我使用Thread来改变AnchorPane的不透明度。 我添加了一个onMouseEnter方法来逐渐提高不透明度,并使用onMouseExited方法逐渐降低不透明度。 我有两个窗格,如果我的鼠标进入其中任何一个,两个窗格都会改变不透明度。 然后我开始我的应用程序,我发现在我的鼠标进入和退出窗格一段时间之后,一个将停止在特定的不透明度,而另一个仍然逐渐改变不透明度。 我很困惑为什么会这样...... 我的代码就像:
private double base = 0.5;
private void changeOpacity(boolean increase){
new Thread(()-> {
while((increase && base < 0.9) || ((!increase)&&base > 0.5)){
base += increase?0.01:-0.01;
leftPane.setOpacity(base);
rightPane.setOpacity(base);
Thread.sleep(5);
}
}
}
我很抱歉我的英语不好。 谢谢!
答案 0 :(得分:1)
您只能在使用JavaFX-Thread时更改JavaFX组件的值(显然不是这样)。
您需要使用Platform.runLater(Runnable)
同步自己,但在您的情况下,您将使用Runnables交换事件循环,这同样是个坏主意。
正确的方法是: