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

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

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

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

Java

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

Q&A

2回答

4253閲覧

JavaFXでGUIの作成を実行したが、ウィンドウが現れなかった

tomo_beginner

総合スコア12

JavaFX

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

Java

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

0グッド

1クリップ

投稿2019/06/06 00:33

編集2022/01/12 10:55

前提

Java入門書を用いてjavafxを勉強している初心者です。
素人だと思ってきいていただけると幸いです。

発生している問題

Eclipseで簡単なGUIの作成を試みています。以下のサイトを参考にしました。
https://qiita.com/Kei_22/items/f54e6ba7cd4bf71b14c8
実行するとコンソールにエラーは出ず、実行されるのですが、javaのアイコンがDockに現れるのみでウィンドウが現れません。
どのように処理したらよいでしょうか、
画像右下のようにjavaのアイコンが現れます

該当のソースコード

Java

1package application; 2 3import javafx.fxml.FXML; 4import javafx.scene.control.Button; 5import javafx.scene.control.Label; 6import javafx.scene.control.TextField; 7 8 9public class FormControls { 10 @FXML private TextField field_Name; 11 @FXML private Button button_Enter; 12 @FXML private Label label_Output; 13 14 @FXML public void onButtonClicked() { 15 label_Output.setText("Hello" + field_Name.getText()+"!!"); 16 17 } 18 19}

Java

1package application; 2 3import javafx.application.Application; 4import javafx.fxml.FXMLLoader; 5import javafx.scene.Scene; 6import javafx.scene.layout.AnchorPane; 7import javafx.stage.Stage; 8 9 10public class Main extends Application { 11 @Override 12 public void start(Stage primaryStage) { 13 try { 14 AnchorPane root = (AnchorPane)FXMLLoader.load(getClass().getResource("Form.fxml")); 15 Scene scene = new Scene(root,400,400); 16 scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 17 primaryStage.setScene(scene); 18 primaryStage.show(); 19 } catch(Exception e) { 20 e.printStackTrace(); 21 } 22 } 23 24 public static void main(String[] args) { 25 launch(args); 26 } 27} 28

fxml

1<?xml version="1.0" encoding="UTF-8"?> 2 3<?import javafx.scene.control.*?> 4<?import java.lang.*?> 5<?import javafx.scene.layout.*?> 6<?import javafx.scene.layout.AnchorPane?> 7 8 9<AnchorPane prefHeight="400.0" prefWidth="400.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="application.FormControls"> 10 <children> 11 <TextField fx:id="field_Name" layoutX="33.0" layoutY="179.0" prefHeight="0.0" prefWidth="167.0" /> 12 <Button fx:id="button_Enter" layoutX="200.0" layoutY="179.0" mnemonicParsing="false" onAction="#onButtonClicked" text="Button" /> 13 <Label fx:id="label_Output" layoutX="15.0" layoutY="98.0" prefHeight="40.0" prefWidth="370.0" text="Label" /> 14 </children> 15</AnchorPane> 16

実行手順

新規javafxプロジェクト
ビルドパスに、javafxのpathを追加
javaアプリケーションで実行

以上が行った手順です

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

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

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

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

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

m.ts10806

2019/06/06 00:41

ご自身のお手元のコードと実行の手順をそのままご提示ください。 コンソールにエラーが出てないかもご確認ください。
tomo_beginner

2019/06/06 01:32

ありがとうございます コンソールにエラーはありませんでした。 よろしくお願いいたします。
m.ts10806

2019/06/06 01:36

コードブロックはファイル毎にわけてもらったほうが良いです。 ブロックの右上の「+」ボタンでコードのコピーができるのですが、コード以外が入っているとそのまま動かないので除去する必要がありますし、除去しているとコードそのままとは言えなくなりますので。 ファイル名はコメント対応するかコードブロックの外に補足としてつけておいてもらえると
m.ts10806

2019/06/06 01:37

あとできればタイトルは汎用的なものではなく質問内容に寄せた具体的な要件にしてもらえると・・
tomo_beginner

2019/06/06 01:41

失礼いたしました。改善できたでしょうか、、、
KSwordOfHaste

2019/06/06 16:54

srcファイルの下が見えませんが、module-info.javaはsrcディレクトリー直下にありますか?あるならその内容はどうなってますか?
tomo_beginner

2019/06/07 05:01

modul-info.javaはありません。。
KSwordOfHaste

2019/06/07 14:41 編集

applicationパッケージ中にあるForm.fxmlの中身はどうなってますか? (質問文を編集して追記してください)
xebme

2020/05/03 00:39

application.cssの内容を追記してください。
guest

回答2

0

実行構成の以下のチェックをはずして実行してみてください。
・SWTで起動する場合は-XstartOnFirstThread 引数を使用する

イメージ説明

投稿2020/05/01 18:48

MikeDavis

総合スコア13

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

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

guest

0

ご質問の情報から再現を試みたのですがうまく再現できている気がしません。
OSの違い(自分はWindows 10)や手順の違いがあるのかも知れません。

自分が気になったのは質問者さんのプロジェクトにmodule-info.javaがないことだったのですが、e(fx)clipseをインストールしてやってみると確かにプロジェクト作成時に「module-info.javaを作る」にチェックが入っているにもかかわらず作成されてませんでした。この振る舞いはe(fx)clipse独自のものかも知れませんが個人的にはバグのように思えました。

自分の手順を書いてみますと

(1) File>New>Project...
(2) JavaFX Projectを選びNext
(3) Project Nameを入れ,JREがjdk-11.0.1になっているのを確認してNext
(4) Create module-info.java fileのチェックはデフォルトのまま(チェックあり)
(5) Librariesタグを選びModulepathを選びAdd Library...
(6) User Libraryを選びNext
(7) OpenJFXのjarを含めたOpenJFXという名前のユーザーライブラリーを定義しそれにチェックを入れてFinish
(8) Next
(9) Declarative UIで
・Language => FXML
・File Name => Form
・Controller Name => FormControls
を指定してFinish

この状態でMain.java, FormControls.java, Form.fxmlをご質問にある内容からコピペ

(10) Project>Clean...
ビルドエラーなし

(11) Run>Run Configuration...とし、Java Applicationとして新たな設定を追加
・MainタグではProject名とメインクラスを指定

実行するとConsoleに

エラー: メイン・クラスapplication.Mainを検出およびロードできませんでした 原因: java.lang.NoClassDefFoundError: javafx/application/Application

というメッセージが出る(ここが質問者さんの状況と異なる)

(11)のダイアログで
・Dependenciesタグを選びShow Command Lineボタンを押してjavaコマンドへのオプションを見てみると(見づらいのでテキトーなところで改行を入れたり内容を要約しています)

C:\Program Files\Java\jdk-11.0.1\bin\javaw.exe -Dfile.encoding=UTF-8 -p "OpenJDKのjarファイルが並んでいる" -classpath "プロジェクトのbinディレクトリー" application.Main

となっており、これでは本来必要なjavafxの必要なモジュールの指定が抜けているため実行できるはずがありません。Macintoshの場合はどうなるんでしょうか・・・

上のオプションでは動くはずもないので次のようにしたら動きました。

(11)のダイアログで
「(x)=Arguments」タブを選び
VM argumentsのところに:
--add-modules javafx.controls,javafx.fxmlを追加

自分がEclipseとe(fx)clipseの仕様を把握してないせいかも知れませんが、どうもこの動きは納得できません。プロジェクトにはmodule-info.javaが出来てしかるべきだと思うのです。JavaFXプロジェクトとしてではなく普通のJavaプロジェクトを新規作成すればmodule-info.javaが生成されるのでこの動きはe(fx)clipse特有の動きだと思います。


質問者さんの問題の原因に近づいたとは言えませんが、上で述べた(11)のDependenciesで質問者さんのプロジェクトのjavaへのオプションがどうなっているか書くと本当の原因に近づけるかも知れません。

投稿2019/06/11 12:23

KSwordOfHaste

総合スコア18392

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問