2017年12月23日土曜日

テキストエディタをJavaで作成する計画6

久しぶりにブログ更新です。

作成中のテキストエディタですが、ロジックがぐちゃぐちゃになってきそうなので、一旦構造を変えてみることにしました。

ターミナルで find コマンド入力するとこんな感じです。
XXXXXXXXXXX:src XXXXXXXXXX$ find .
./textediter
./textediter/controller
./textediter/controller/DialogController.java
./textediter/controller/EditerController.java
./textediter/controller/FindController.java
./textediter/controller/ReplaceController.java
./textediter/model
./textediter/model/CommonConst.java
./textediter/model/Dialog.java
./textediter/model/Editer.java
./textediter/model/Find.java
./textediter/model/Main.java
./textediter/model/Replace.java
./textediter/view
./textediter/view/DialogView.fxml
./textediter/view/EditerView.fxml
./textediter/view/FindView.fxm
./textediter/view/ReplaceView.fxml

これで実装し直してみたわけですが、FXMLファイルを別のパッケージに移動させると実行時エラーが出て地味に大変だったです。


Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: Location is not set.
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2434)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at textediter.model.Editer.start(Editer.java:52)
at textediter.model.Main.start(Main.java:18)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
Exception running application textediter.model.Main

いっぱい出てきましたが、一言で言うとFXMLファイルが参照できなかったみたいですね。
色々試してみた結果、これで治りました。

        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/textediter/view/EditerView.fxml"));

次はポップアップ作ろうと思います。

0 件のコメント:

コメントを投稿