JavaFXでIllegalStateExceptionが出たので書き直しをしていました
書き直したことをまとめるとRunnableを使っていた部分をServiceに変更しました
ソースです
Java
1public void StartEasy () { 2 new StartEasy().start(); 3} 4 5public class StartEasy extends Service<Void> { 6 protected Task<Void> createTask() { 7 return new SetEasy(); 8 } 9} 10 11public class SetEasy extends Task<Void> { 12 protected Void call() throws Exception { 13 Platform.runLater(new Th_Easy()); 14 return null; 15 } 16} 17 18public class Th_Easy implements Runnable { 19 public void run() { 20 Main.setScene(new GameField()); //←ウィンドウ上にあるNodeを操作するコードが書かれてます 21 } 22}
JavaFX8からPlatform.runLater();を使用しないとウィンドウ内のNode等の操作ができないと聞いたのでこのようなソースにしてみました
StartEasy();が呼び出されるとMain.setScene(new GameField());が非同期処理で実行されると思ったのですがうまく実行されません
何か問題があるのでしょうか?
簡単なミスかも知れませんがよろしくお願いします
誰でも構いません
何か間違っていそうな部分があれば指摘シてくださるとありがたいです
Runnableを使っていた時はうまくうごきましたか?
Node等の操作とは具体的には何ですか?
返信有り難うございます
Runnableを使用するとIllegalStateExceptionが発生してしまいます
Node等の操作というのはGUIのStageにPaneやButtonを配置することです
他になにか質問はありますでしょうか?
IllegalStateExceptionのメッセージがわかれば教えて下さい。Can only start a Service in the READY state.などですか?
Not on FX application thread; currentThread = Thread-4
というメッセージでした
現状で、「うまく実行されません」とありますが具体的にはどういうことでしょうか?(コレを最初に聞くべきでした)
Threadの内容はこのプログラム中に出てくるものの設定、初期化を行っています
そのためThreadを使わないと次の処理ができないためThreadを使いました。
そしてこのプログラムはウィンドウを表示しています、そのウィンドウを表示している時にこのThreadを実行するとウィンドウの操作(ウィンドウの移動、リサイズ)ができない状況になってしまいます。
このウィンドウの操作ができるようにしたいのですが・・・
状況から判断するとThreadは関係ないような気もしますが・・・Threadを使用しないで動作させるということは不可能なのですよね?「ウィンドウを表示している」とはメインのウィンドウ以外にウィンドウを開いているということでよいですか?そして、リサイズ等できないとは「メインのウィンドウが」ということでしょうか?
表示しているのは1つのウィンドウだけです。Threadを使わないで実行するとリサイズできなくなります。
回答1件
あなたの回答
tips
プレビュー