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

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

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

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

NullPointerException

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

Java

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

FXML

FXMLは、JavaFXに用意されているXMLベースのGUI記述言語です

解決済

FXMLからJavaFXへの要素取得時のエラー(InvocationTargetException、NullPointerException)

magutyan0814
magutyan0814

総合スコア2

JavaFX

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

NullPointerException

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

Java

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

FXML

FXMLは、JavaFXに用意されているXMLベースのGUI記述言語です

1回答

0評価

0クリップ

405閲覧

投稿2022/01/02 13:14

前提・実現したいこと

SceneBuilderとJavaFXで円が既定の位置から水平方向に移動するアニメーションを作成したいと考えています。

発生している問題・エラーメッセージ

エラー文を見て調べたところ、
java.lang.reflect.InvocationTargetException から
circle1がFXMLからうまく取得できていないことが問題だと思うのですが、解決法がわかりません。

Exception in Application start method java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) Caused by: java.lang.NullPointerException: Cannot invoke "javafx.scene.shape.Circle.getLayoutX()" because "this.circle1" is null at application.Main.start(Main.java:39) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:847) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456) at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184) ... 1 more Exception running application application.Main

該当のソースコード

java

package application; import java.net.URL; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; import javafx.fxml.FXML; import javafx.scene.shape.*; // import javafx.animation.PathTransition; import javafx.animation.TranslateTransition; import javafx.util.Duration; // import javafx.animation.Transition.*; public class Main extends Application { @FXML private Circle circle1; public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { Path path = new Path(); path.getElements().add(new MoveTo(0f, 50f)); TranslateTransition tt = new TranslateTransition(Duration.seconds(2), circle1); double c1X = circle1.getLayoutX();//エラー発生 // tt.setFromX(c1X); // tt.setToX(c1X + 20); URL location = getClass().getResource( "Main.fxml" ); FXMLLoader fxmlLoader = new FXMLLoader( location ); Pane root = (Pane) fxmlLoader.load(); Scene scene = new Scene( root , 600 , 400 ); primaryStage.setScene( scene ); primaryStage.show(); } }

FXML

<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Slider?> <?import javafx.scene.image.Image?> <?import javafx.scene.image.ImageView?> <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.BorderPane?> <?import javafx.scene.layout.HBox?> <?import javafx.scene.shape.Circle?> <BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1"> <top> <HBox prefHeight="31.0" prefWidth="600.0" BorderPane.alignment="CENTER"> <children> <Button mnemonicParsing="false" text="Button" /> <Button mnemonicParsing="false" text="Button" /> </children> </HBox> </top> <bottom> <Slider BorderPane.alignment="CENTER" /> </bottom> <center> <AnchorPane prefHeight="331.0" prefWidth="600.0" BorderPane.alignment="CENTER"> <children> <ImageView fitHeight="100.0" fitWidth="80.0" layoutX="71.0" layoutY="67.0" pickOnBounds="true" preserveRatio="true" AnchorPane.bottomAnchor="169.0" AnchorPane.leftAnchor="71.0" AnchorPane.rightAnchor="449.0" AnchorPane.topAnchor="67.0"> <image> <Image url="@../../img/green.png" /> </image> </ImageView> <ImageView fitHeight="100.0" fitWidth="80.0" layoutX="260.0" layoutY="67.0" pickOnBounds="true" preserveRatio="true"> <image> <Image url="@../../img/red.png" /> </image> </ImageView> <ImageView fitHeight="100.0" fitWidth="80.0" layoutX="458.0" layoutY="67.0" pickOnBounds="true" preserveRatio="true"> <image> <Image url="@../../img/yellow.png" /> </image> </ImageView> <Circle fx:id="circle1" fill="#ff1f1f" layoutX="362.0" layoutY="92.0" radius="10.0" stroke="TRANSPARENT" strokeType="INSIDE" /> <Circle fx:id="circle2" fill="#ff1f1f" layoutX="398.0" layoutY="92.0" radius="10.0" stroke="TRANSPARENT" strokeType="INSIDE" /> <Circle fx:id="circle3" fill="#ff1f1f" layoutX="432.0" layoutY="92.0" radius="10.0" stroke="TRANSPARENT" strokeType="INSIDE" /> </children> </AnchorPane> </center> </BorderPane>

試したこと

  • Main.fxmlはMain.javaと同じフォルダに入っています。

  • コメントアウトして調べた結果、

double c1X = circle1.getLayoutX(); を含めるとこのエラーが起きる事がわかりました。
恐らくうまくFXML情報を取得できていないのかなと思うのですが、私の力不足で解決できません。皆さんの知恵を貸してくださると大変助かります。

補足情報(FW/ツールのバージョンなど)

  • vscode ver1.63.2
  • JavaFX Scene Builder 17.0.0

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

JavaFX

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

NullPointerException

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

Java

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

FXML

FXMLは、JavaFXに用意されているXMLベースのGUI記述言語です