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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

JavaFX

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

Java

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

Q&A

解決済

1回答

1151閲覧

(javaFX) TextField に文字列をセットしようとした時にNullPointExceptionが出てしまう現象

i_was_stack

総合スコア1

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

JavaFX

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

Java

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

0グッド

0クリップ

投稿2022/07/04 12:55

編集2022/07/04 13:01

javaFX, Scene Builder, VScodeを使用して簡単なデスクトップアプリを試作しています。
私は初心者のため、まずは簡単なプログラムを試作してみようと試みましたがスタックしてしまいました。
作りたい内容は、起動ボタンを押下したらTextFieldに"サンプルテキスト"をセットするという単純なものですが、以下のエラーが出てTextFieldがnullと認識されてしまいます。何か初歩的なミスを犯しているような気がしてあらゆるサイトをさがしましたが、解決策が見つからず困っております。わかる方いらっしゃいましたらご教授をよろしくお願いいたします。

terminal エラー内容

1起動ボタンがクリックされました 2Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 3 at javafx.fxml@18.0.1/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1857) 4 at javafx.fxml@18.0.1/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1724) 5 at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 6 at javafx.base@18.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234) 7 at javafx.base@18.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 8 at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 9 at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 10 at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 11 at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 12 at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 13 at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 14 at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 15 at javafx.base@18.0.1/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 16 at javafx.base@18.0.1/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 17 at javafx.base@18.0.1/javafx.event.Event.fireEvent(Event.java:198) 18 at javafx.graphics@18.0.1/javafx.scene.Node.fireEvent(Node.java:8797) 19 at javafx.controls@18.0.1/javafx.scene.control.Button.fire(Button.java:203) 20 at javafx.controls@18.0.1/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:208) 21 at javafx.controls@18.0.1/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274) 22 at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247) 23 at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 24 at javafx.base@18.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234) 25 at javafx.base@18.0.1/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 26 at javafx.base@18.0.1/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 27 at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 28 at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 29 at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 30 at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 31 at javafx.base@18.0.1/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 32 at javafx.base@18.0.1/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 33 at javafx.base@18.0.1/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 34 at javafx.base@18.0.1/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 35 at javafx.base@18.0.1/javafx.event.Event.fireEvent(Event.java:198) 36 at javafx.graphics@18.0.1/javafx.scene.Scene$MouseHandler.process(Scene.java:3881) 37 at javafx.graphics@18.0.1/javafx.scene.Scene.processMouseEvent(Scene.java:1874) 38 at javafx.graphics@18.0.1/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2607) 39 at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411) 40 at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301) 41 at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) 42 at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450) 43 at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424) 44 at javafx.graphics@18.0.1/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449) 45 at javafx.graphics@18.0.1/com.sun.glass.ui.View.handleMouseEvent(View.java:551) 46 at javafx.graphics@18.0.1/com.sun.glass.ui.View.notifyMouse(View.java:937) 47 at javafx.graphics@18.0.1/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 48 at javafx.graphics@18.0.1/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184) 49 at java.base/java.lang.Thread.run(Thread.java:833) 50Caused by: java.lang.reflect.InvocationTargetException 51 at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:116) 52 at java.base/java.lang.reflect.Method.invoke(Method.java:577) 53 at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:77) 54 at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) 55 at java.base/java.lang.reflect.Method.invoke(Method.java:577) 56 at javafx.base@18.0.1/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:275) 57 at javafx.fxml@18.0.1/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:84) 58 at javafx.fxml@18.0.1/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1852) 59 ... 46 more 60Caused by: java.lang.NullPointerException: Cannot invoke "javafx.scene.control.TextField.setText(String)" because "this.account" is null 61 at Controller.kidou(Controller.java:17) 62 at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) 63 ... 53 more 64PS D:\Java\cr_test>

上記の中には二つのエラー情報があり、
●Caused by: java.lang.reflect.InvocationTargetException と
●Caused by: java.lang.NullPointerException: Cannot invoke    "javafx.scene.control.TextField.setText(String)" because "this.account" is null
at Controller.kidou(Controller.java:17)
ですが、一つ目のものはjavaFXで直接の原因になっているケースはほとんどないと何かのサイトにありましたので、二つ目のNullPointerExceptionが原因だと思います。TextFieldを認識していないような感じです。

 fxmlファイルはScene Builderで制作したものから必要な部分を抜粋しました。今回関係しているところは起動ボタン(id = "button1")と TextField (id = "account")の部分です。

プログラムを実行すると、画面がScene Builderでデザインした画面が立ち上がります、その後起動ボタンを押すと上記のエラーとなります。起動ボタンのクリックは認識できているようです。

main.java

1import javafx.application.Application; 2import javafx.fxml.FXMLLoader; 3import javafx.scene.Parent; 4import javafx.scene.Scene; 5import javafx.stage.Stage; 6 7public class App extends Application { 8 9 //Controller controller; 10 11 public static void main(String[] args) throws Exception { 12 launch(args); 13 } 14 15 @Override 16 public void start(Stage stage) throws Exception { 17 FXMLLoader loader = new FXMLLoader(getClass().getResource("CR_test.fxml")); 18 Parent root = loader.load(); 19 //loader.setController(controller); 20 21 Scene scene = new Scene(root, 600, 500); 22 stage.setTitle("Court Resurver"); 23 stage.setScene(scene); 24 stage.show(); 25 } 26} 27

CR_test.fxml

1<?xml version="1.0" encoding="UTF-8"?> 2 3<?import javafx.scene.control.Button?> 4<?import javafx.scene.control.ComboBox?> 5<?import javafx.scene.control.DatePicker?> 6<?import javafx.scene.control.Label?> 7<?import javafx.scene.control.TextField?> 8<?import javafx.scene.layout.AnchorPane?> 9 10<AnchorPane id="time3" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller"> 11 <children> 12 <Label layoutX="70.0" layoutY="328.0" text="パスワード" /> 13 <Label layoutX="65.0" layoutY="297.0" text="アカウント名" /> 14 <Button id="button1" layoutX="435.0" layoutY="322.0" mnemonicParsing="false" onAction="#kidou" text="起動" /> 15 <Button id="button2" layoutX="509.0" layoutY="322.0" mnemonicParsing="false" onAction="#teishi" text="停止" /> 16 <TextField id="account" layoutX="142.0" layoutY="294.0" /> 17 <TextField id="password" layoutX="142.0" layoutY="325.0" /> 18 </children> 19</AnchorPane> 20

Controller.java

1import javafx.event.ActionEvent; 2import javafx.fxml.FXML; 3import javafx.scene.control.Button; 4import javafx.scene.control.TextField; 5 6public class Controller { 7 8 @FXML private TextField account; 9 10 @FXML private TextField password; 11 12 @FXML private Button button1; 13 14 // 起動ボタンクリック 15 @FXML private void kidou(ActionEvent event) { 16 System.out.println("起動ボタンがクリックされました"); 17 account.setText("サンプルテキスト"); 18 19 // String accountName = account.getText(); 20 // System.out.println(accountName); 21 } 22 23 // 停止ボタンクリック 24 @FXML 25 public void teishi(ActionEvent event) { 26 System.out.println("停止ボタンがクリックされました"); 27 } 28 29} 30

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

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

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

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

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

guest

回答1

0

ベストアンサー

fxmlファイルは手作りでしょうか。

diff

1 <children> 2 <Label layoutX="70.0" layoutY="328.0" text="パスワード" /> 3 <Label layoutX="65.0" layoutY="297.0" text="アカウント名" /> 4- <Button id="button1" layoutX="435.0" layoutY="322.0" mnemonicParsing="false" onAction="#kidou" text="起動" /> 5+ <Button fx:id="button1" layoutX="435.0" layoutY="322.0" mnemonicParsing="false" onAction="#kidou" text="起動" /> 6- <Button id="button2" layoutX="509.0" layoutY="322.0" mnemonicParsing="false" onAction="#teishi" text="停止" /> 7+ <Button fx:id="button2" layoutX="509.0" layoutY="322.0" mnemonicParsing="false" onAction="#teishi" text="停止" /> 8- <TextField id="account" layoutX="142.0" layoutY="294.0" /> 9+ <TextField fx:id="account" layoutX="142.0" layoutY="294.0" /> 10- <TextField id="password" layoutX="142.0" layoutY="325.0" /> 11+ <TextField fx:id="password" layoutX="142.0" layoutY="325.0" /> 12 </children> 13 </AnchorPane>

投稿2022/07/04 13:30

編集2022/07/04 13:32
shiketa

総合スコア3971

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

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

i_was_stack

2022/07/04 14:06

私は、本当に初歩的なミスをしていたようですね。 id と fx:id 2つの概念があることに気が付けませんでした。 修正して起動してみたところ上手く動作しました。 非常に助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問