質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

2589閲覧

JavaFXについて

luma

総合スコア183

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2015/12/05 03:14

EclipseでJava8をつかって開発しています

JavaFXで、すべてのウィンドウのShowingがHideになると、

つまり全てのStageがhide()されると、

Platform.runLater()が使えなく(反応しなく)なるので困っています…

ソースとしては、

java

1 2/* 3package,import省略 4*/ 5 6public class MainClass extends Application{ 7 @Override 8 public void start(Stage stage) throws Exception { 9 Task<Void> taskmain = new Task<Void>() { 10 @Override 11 protected Void call() throws Exception { 12 while(true){ 13 14 try { 15 Thread.sleep(1); 16 } catch(InterruptedException e){ 17 e.printStackTrace(); 18 } 19 20 boolean flag = false; 21 /* flagがtrueになるようなイベント */ 22 //runLaterの外で処理すると「スレッドが違う」と、例外を投げられます… 23 try { 24 Platform.runLater(() -> { 25 System.out.println("runLaterは実行されています。"); 26 //宣言された別ウィンドウとしての(Stage)otherStageをshow() 27 //otherStageの親はこのメソッドのstageになっています。 28 if(flag)OtherClass.otherStage.show(); 29 30 }); 31 } catch(Exception e){ 32 e.printStackTrace(); 33 } 34 } 35 } 36 }; 37 new Thread(taskmain).start(); 38 39 //都合上stageは表示しないようにしたいです。 40 /* 41 *表示してしまえば、すべてのStageがhide()されてもこのウィンドウ(stage)が残っているので、 42 *問題なくrunLaterが走るのですが、 43 *stageは表示しない方針でお願いします。 44 */ 45 46 47 48 } 49 50 static public void main(String[] args) { 51 launch(args); 52 } 53}

こんなかんじです(必要なところだけ抜き出したので、かなりガバガバですが…)

解決していただきたいことは、
otherStageがhide()されても、runLaterが止まらないようにする。

MainClass.start()のstageを表示せずに。

ただ、もしstageを表示するだけして、
ユーザーに触れないようにすることができるなら、
そちらがいいかなーとは思っているのですが、

stage.setOpacity(0);

では、Windowsですとタスクバーから削除できてしまいます…
なので、タスクバーに表示されないようにすることができればいいのですが…
ってところです。

もしテストする際は、OtherClass.otherStageをstageを親にして宣言すれば実行されると思います…

止まる流れとしては、

①イベントでflagがtrueになる :走る

②otherStageが表示される :走る

③ボタンを押されるなどして、otherStageがhide()される :ここで走らなくなる

④イベントでflagがtrueになっても、
runLaterが走らないので、otherStageが表示されない…

ご助力願います

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

全てのStageが閉じた状態になると、Platform.runLater()のタスクを実行する JavaFX Application Thread が停止してしまうようです。

これを抑制するには、Platform.setImplicitExit(false)を実行すると良いそうです。
mainメソッドのlaunchメソッドの前にこれを書いてみてください。(どこに書くのが正解なのかは自信がありません。)


参考リンク:

Platform - Java FX 8 API ドキュメント
http://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#setImplicitExit-boolean-

Java 1.8 対応: OpenDolphin 日記
http://opendolphin.motomachi-hifuka.jp/2015/03/java-18-6808.html

投稿2015/12/05 08:35

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

luma

2015/12/05 08:43

ご回答ありがとうございます。 思い通りに動きました、助かりました!! ありがとうございましたm(_)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問