私はFXMLファイルにラベルを持っている:バックグラウンドワーカーからfxmlラベルを更新するには?
<Label fx:id="labelA"/>
私は労働者が実行しているバックグラウンド中にコントローラでこれを更新したいです。私はこのような何かをしようとしている:
public class FXHelloCVController
{
@FXML
private Label labelA;
@FXML
protected void startMatching(ActionEvent event)
{
SwingWorker<Boolean, String> worker = new SwingWorker<Boolean, String>()
{
@Override
protected Boolean doInBackground() throws Exception
{
for(int y=0; y<*something*; y++){
if(n.get(y)!=null){
...
publish(n.get(y).name);
...
}
}
return true;
}
@Override
protected void process(List<String> chunks) {
String n = chunks.get(chunks.size()-1);
labelA.setText(n);
}
};
worker.execute();
return;
}
しかし、機能が「labelA.setText(nは)」と呼ばれたとき、それは次の例外表示されます。
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = AWT-EventQueue-0
何が間違っているの?
GiannaはこのJavaではなくSwingとJavaFXを混在させないでください。ServiceクラスとWorkerクラスはhttp://docs.oracle.com/javafx/2/threads/jfxpub-threadsのように見えます。 htm(一度に学ぶのはあまり簡単ではありませんが、いったんやったら本当にクールです)。 – GOXR3PLUS