web-dev-qa-db-ja.com

javafxプログラムの実行時のInvocationTargetException

したがって、これは、My pcにjdk 1.7.0が含まれていたjavafxの例で機能したため、Java8のFXの新しいバージョンである可能性があります。

素敵なスタックトレースを取得します

jfx-project-run:
Executing E:\workspace\PathFinderApp\dist\run1095471771\PathFinderApp.jar using platform C:\Program Files\Java\jdk1.8.0\jre/bin/Java
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:483)
    at com.Sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.Java:367)
    at com.Sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.Java:305)
    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:483)
    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:894)
    at com.Sun.javafx.application.LauncherImpl.access$000(LauncherImpl.Java:56)
    at com.Sun.javafx.application.LauncherImpl$1.run(LauncherImpl.Java:158)
    at Java.lang.Thread.run(Thread.Java:744)
Caused by: javafx.fxml.LoadException: 
file:/E:/workspace/PathFinderApp/dist/run1095471771/PathFinderApp.jar!/com/rpg/gui/main.fxml:11

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.Java:2617)
    at javafx.fxml.FXMLLoader.access$700(FXMLLoader.Java:104)
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.Java:937)
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.Java:976)
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.Java:216)
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.Java:738)
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.Java:2723)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.Java:2527)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.Java:2441)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.Java:3230)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.Java:3191)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.Java:3164)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.Java:3140)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.Java:3120)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.Java:3113)
    at com.rpg.gui.GUI.loadMainPane(GUI.Java:34)
    at com.rpg.gui.GUI.initialize(GUI.Java:20)
    at Main.start(Main.Java:20)
    at com.Sun.javafx.application.LauncherImpl$8.run(LauncherImpl.Java:837)
    at com.Sun.javafx.application.PlatformImpl$7.run(PlatformImpl.Java:335)
    at com.Sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.Java:301)
    at com.Sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.Java:298)
    at Java.security.AccessController.doPrivileged(Native Method)
    at com.Sun.javafx.application.PlatformImpl$6.run(PlatformImpl.Java:298)
    at com.Sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.Java:95)
    at com.Sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.Sun.glass.ui.win.WinApplication.access$300(WinApplication.Java:39)
    at com.Sun.glass.ui.win.WinApplication$4$1.run(WinApplication.Java:112)
    ... 1 more
Caused by: Java.lang.InstantiationException: com.rpg.gui.MainController
    at Java.lang.Class.newInstance(Class.Java:418)
    at Sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.Java:51)
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.Java:932)
    ... 26 more
Caused by: Java.lang.NoSuchMethodException: com.rpg.gui.MainController.<init>()
    at Java.lang.Class.getConstructor0(Class.Java:2971)
    at Java.lang.Class.newInstance(Class.Java:403)
    ... 28 more
Exception running application Main
Java Result: 1

基本的にここで何か間違っていると言って_"com/rpg/gui/main.fxml:11"

そしてその行は

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="com.rpg.gui.MainController">

だから私はそれがメインコントローラーと何か関係ないのがわかることができるので、それはfxmlとコントローラーを正しくロードすることと関係がありますか?しかし、それは私のアイデアの終わりについてです

MainController mainController = new MainController(path);
Pane mainPane = FXMLLoader.load(getClass().getResource("main.fxml"));
Window.setMainController(mainController);
Window.swap(path+"content.fxml");

それは、javaFXの経験がある人にすべてを投げる方法、またはこれを行うJava8の変更を知っている方法ですか??

MainControllerには引数なしのコンストラクタがありません。 FXMLLoaderがルート要素で_fx:controller_属性に遭遇すると、属性で指定されたクラスの引数なしのコンストラクターを(効果的に)呼び出すことにより、そのコントローラーのインスタンスを作成しようとします。

これを修正するには(最も簡単な方法)、FXMLファイルから_fx:controller_属性を削除しますFXMLLoaderでコントローラーを「手動」で設定します。静的なload(...)メソッドに依存する代わりに、FXMLLoaderインスタンスを作成する必要があります。

_FXMLLoader loader = new FXMLLoader(getClass().getResource("main.fxml"));
loader.setController(new MainController(path));
Pane mainPane = loader.load();
_
18
James_D

私は同じ問題に直面し、それに関連する少しを共有したいと思います。 Java 8およびNetbeans 8.1を使用していて、javafx FXMLアプリケーションを作成したときにこれを取得しました。
次のヒントをご覧ください。

  1. 新しいプロジェクトを作成するときclean and build実行する前のプロジェクト。
  2. ファイル(コントローラー、fxml)の名前を変更する場合、IDE少なくともNetbeansが行っていない他のファイルに変更を適用しないでください。したがって、他のファイルのファイル名を手動で変更する必要があります。
  3. コントローラはfxmlファイルまたはmainクラスで定義できます。 mainクラスでコントローラーを定義する場合は、@ James_Dで説明されているメソッドを使用します。 fxmlファイルで定義する場合は、fx:controller属性として

     fx:controller="yourProjectName.yourFXMLDocumentControllerName"
    

    メインクラスではそれを次のように参照します

    Parent root = FXMLLoader.load(getClass().getResource("yourFXMLFileName.fxml"));
    
  4. すべてが正しいと思うが、それでもエラーが発生する場合clean and build再度プロジェクトを実行してみてください。

それが誰かを助けることを願っています。

4

SceneBuilder/netbeans 8にはバグがあるようです。Scenebuilderに保存すると、別のxmlns:fx = "..."が作成されるため、問題になる可能性があります...

また、私はJava8を使用しているfxmlを見て、これらを持っています:xmlns = "http://javafx.com/javafx/8" xmlns:fx = "http://javafx.com/fxml/1"

あなたが気づいたのは:xmlns:fx = "http://javafx.com/fxml"

2
jdub1581

JDK11/JavaFX11に苦労している人向け

このエラーが発生した理由は、プロジェクトがFXML参照とグラフィック構成を含むUIモジュールに依存していたためです。以下のコンパイルログダンプにこれらの行があることに気付きました。

原因:Java.lang.IllegalAccessException:クラスcom.Sun.javafx.application.LauncherImpl(モジュールjavafx.graphics内)がクラスacademy.learnprogramming.ui.Main(モジュールacademy.learnprogramming.common内)にアクセスできないのは、モジュールacademy.learnprogramming .commonは、academy.learnprogramming.uiをモジュールjavafx.graphicsにエクスポートしません

そのため

これがMavenプロジェクトではない場合、Project/module-name/src/module-info.Javaモジュールシステムがプロジェクト内のすべてのモジュールにアクセスできることを確認する必要があります。

module com.test.common {

    requires javafx.fxml;
    requires javafx.controls;
    requires javafx.graphics;
    requires Java.sql;
    // ... etc.



    opens com.test.common;
    opens com.test.ui;        // For my particular case, I had Forgotten this one
    opens com.test.db;        // And this one
}

参考のために:

Exception in Application constructor
Exception in thread "main" Java.lang.reflect.InvocationTargetException
    at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
    at Java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.base/Java.lang.reflect.Method.invoke(Method.Java:566)
    at Java.base/Sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.Java:1051)
Caused by: Java.lang.RuntimeException: Unable to construct Application instance: class academy.learnprogramming.ui.Main
    at javafx.graphics/com.Sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.Java:890)
    at javafx.graphics/com.Sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.Java:195)
    at Java.base/Java.lang.Thread.run(Thread.Java:834)
Caused by: Java.lang.IllegalAccessException: class com.Sun.javafx.application.LauncherImpl (in module javafx.graphics) cannot access class academy.learnprogramming.ui.Main (in module academy.learnprogramming.common) because module academy.learnprogramming.common does not export academy.learnprogramming.ui to module javafx.graphics
    at Java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.Java:361)
    at Java.base/Java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.Java:591)
    at Java.base/Java.lang.reflect.Constructor.newInstance(Constructor.Java:481)
    at javafx.graphics/com.Sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.Java:802)
    at javafx.graphics/com.Sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.Java:455)
    at javafx.graphics/com.Sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.Java:428)
    at Java.base/Java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.Sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.Java:427)
    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:174)
    ... 1 more
2
Chrips

使いました

Pane mainPane = FXMLLoader.load(getClass().getResource("main.fxml"));

試して

Pane mainPane = FXMLLoader.load(getClass().getResource("/main.fxml"));
2
idzik78

いずれかが回答に従って問題を解決しない場合、簡単な方法は、新しいfxml Emptyクラスを作成し、問題の原因となったfxmlのeditおよびxmlコードをコピーをクリックすることです=新しいクラスに。 start()メソッドに移動して、以下を変更します。

Pane mainPane = FXMLLoader.load(getClass().getResource("main.fxml"));

Pane mainPane = FXMLLoader.load(getClass().getResource("newClass.fxml"));
0
Abderrahmane