我在Scala中有一个简单的JavaFX程序,我有一个我写的形状的窗格。
class SimpleWindow extends Application {
val pane = new BorderPane
val subPane = new Pane
var coord = (0, 0)
var primeStage: Stage = _
var x = 600
var y = 600
override def start(primaryStage: Stage) {
primeStage = primaryStage
pane.setCenter(subPane)
val line = new Line(25, 25, 50, 50)
subPane.getChildren.add(line)
val x = 600
val y = 600
val scene = new Scene(pane, x, y)
// Finalize and show the stage
primaryStage.setScene(scene)
primaryStage.setTitle("The Click Me App")
primaryStage.show()
}
def moveTo(x: Int, y: Int): Unit = {
SimpleWindow.this.coord = (x, y)
}
def lineTo(x: Int, y: Int): Unit = {
val line = new Line(coord._1, coord._2, x, y)
SimpleWindow.this.subPane.getChildren.add(line)
SimpleWindow.this.coord = (x, y)
}
}
现在simplewindow类将在一个单独的线程上,我希望能够使用lineTo方法从外部类创建一个新行。这是所有失败的地方,当我使用来自另一个类的lineTo(在一个单独的线程上)gui没有更新时,我相信我需要在窗格上有某种监听器,以便在添加节点时进行更新但是我不知道怎么做。
知道如何解决这个问题吗?
答案 0 :(得分:0)
在JavaFX中,与大多数其他GUI框架一样,您只能从专用的" UI-thread"访问UI控件。如果要从后台线程传递某些信息,则应使用Platform.runLater调用哪些帖子适用于该线程。
您也可以考虑阅读有关更高级API的Concurrency in JavaFX教程。