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

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

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

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

Java

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

Q&A

2回答

17232閲覧

JavaFX 画面表示ができないエラー(Java学習中)

Takahito

総合スコア66

JavaFX

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

Java

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

0グッド

0クリップ

投稿2015/11/18 17:40

編集2022/01/12 10:55

こんばんは。
今回は、画面表示ができなくなるという現象が起きてしまったので質問させていただきたいです。

いつも、聞いてばかりで申し訳ないと思い、
http://stackoverflow.com/questions/25183064/java-fxml-load-exception

http://stackoverflow.com/questions/22914895/fxml-load-exception

このような、類似してそうなサイトをいくつも見てみましたが、参考になりそうなのを見つけることはできませんでした。

この解決法とともにこの解決法に近づくことができそうなググり方なども教えていただけるとありがたいです。
ググる能力がすごく足りないので。。。

僕は、エラー名を使ってググりました。

コンソールのエラー文 ↓

javafx.fxml.LoadException:

/Users/TakahitoNakashima/JavaWorkspace/App02/bin/application/Window.fxml

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2543) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) at application.Main.start(Main.java:14) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163(LauncherImpl.java:863) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(PlatformImpl.java:326) at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java:294) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)

Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[3,3]
Message: 処理命令の先頭にはターゲットの名前が必要です。
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:601)
at javax.xml.stream.util.StreamReaderDelegate.next(StreamReaderDelegate.java:88)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2513)
... 14 more

Main.java ↓

package application;

import javafx.fxml.FXMLLoader;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;

public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = (BorderPane) FXMLLoader.load(getClass().getResource("Window.fxml"));
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();

BorderPane roots = new BorderPane(); Stage stage2 = new Stage(); stage2.initOwner(primaryStage); stage2.setScene(new Scene(new BorderPane(), 640d, 400d)); Scene scene2 = new Scene(roots,500,500); stage2.setScene(scene2); stage2.show(); stage2.setX(primaryStage.getX() + 100); stage2.setY(primaryStage.getY() + 100); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); }

}

Window.fxml ↓

<?xml version="1.0" encoding="UTF-8"?>
<? import javafx.scene.label ?>

<BorderPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">

<top> <Label fx:id="label1" text="This is FXML! /> </top> </BorderPane>

追記:
BorderPane root = (BorderPane) FXMLLoader.load(getClass().getResource("Window.fxml"));

を変更した時にエラーが出るようになりました。

もともと、
BorderPane roots = new BorderPane();
だったですが、この時にはwindowが2つ出ました。

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

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

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

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

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

pi-chan

2015/11/18 23:11

> 画面表示ができなくなるという現象 という表現からすると以前は表示されていたということですか?もしそうなら、どこを修正したら表示されなくなったのですか?
guest

回答2

0

fxmlに間違いがあります

  1. import文の形式が間違っている・ラベルのパッケージ名が間違っている
誤:<? import javafx.scene.label ?> 正:<?import javafx.scene.control.Label?>
  • <? と import の間にスペースがあるため形式エラー
  • ラベルのパッケージ名は javafx.scene.labelではなくjavafx.scene.control.Label
  1. 必要なクラスのimportがされていない
<?import javafx.scene.layout.BorderPane?>
  • BorderPaneクラスを使っているのでimport文を追記しなければならない
  1. textプロパティの値が正しく設定されていない
誤:<Label fx:id="label1" text="This is FXML! /> 正:<Label fx:id="label1" text="This is FXML!" />
  • textプロパティの値がダブルクォーテーションで囲まれていません

投稿2015/11/19 15:18

編集2015/11/19 15:21
methan

総合スコア10

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

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

Takahito

2015/11/19 17:10

ありがとうございます。 注意して見てたつもりだったのですが、なかなか見つけられないものですね。 ただ、これでも動かなくて。。。 何が起こってるのでしょう。
methan

2015/11/20 07:33

修正後のエラーはどのようになっているのでしょうか?
Takahito

2015/11/20 20:59

同じものが出るのでもう一度作り直すことにしました。
guest

0

せっかく追記して頂いたのに、自分には JavaFX を試せる環境も使用経験も無いので恐縮ですが・・・

下記の解説等を読んでサラッと眺めてみた感じでは、修正個所(つまり呼び出す側)には問題が無いように思います。
FXMLからNodeのインスタンスの作成方法について

ただ、本件とは無関係かもしれないけれども個人的にちょっと気になったので。
Window.fxml 側の下記の部分、ダブルクォーテーションが閉じていないですが、問題無いものなのでしょうか?タグの対応関係がおかしくなってしまいませんか?

<Label fx:id="label1" text="This is FXML! />
<Label fx:id="label1" text="This is FXML!" />

質問欄に記載した際の単純なタイプミスかもしれませんが・・・

投稿2015/11/19 12:50

pi-chan

総合スコア5936

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

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

Takahito

2015/11/19 17:08

ありがとうございます。 Window.fxmlの方にはミスが多かったようです。 ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問