2017-08-28 4 views
1

内部クラスを内部クラスから起動しようとしていますが、動作しません。JavaFXは内部アプリケーションクラスを起動します

私はすでに静的修飾子をWindowから削除し、Mainのインスタンスから起動しようとしました。

コード:

import javafx.application.Application; 
import javafx.stage.Stage; 

public class Main { 
    private static class Window extends Application { 
     @Override 
     public void start(Stage stage) { 
      stage.show(); 
     } 
    } 

    public static void main(String args[]) { 
     Application.launch(Window.class, args); 
    } 
} 

例外:

Exception in Application constructor 
Exception in thread "main" java.lang.RuntimeException: Unable to construct Application instance: class VirtualLaunchpad$Window 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:907) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$1(LauncherImpl.java:182) 
    at java.lang.Thread.run(Thread.java:748) 
Caused by: java.lang.NoSuchMethodException: VirtualLaunchpad$Window.<init>() 
    at java.lang.Class.getConstructor0(Class.java:3082) 
    at java.lang.Class.getConstructor(Class.java:1825) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$7(LauncherImpl.java:818) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) 
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$5(GtkApplication.java:139) 
    ... 1 more 

答えて

4

Applicationサブクラス(とその引数なしのコンストラクタ)は、公開でなければなりません。 Application.launch()メソッドは、リフレクションによってアプリケーションクラスをインスタンス化するときに、公開されていない引数のコンストラクタのみを検索します。

import javafx.application.Application; 
import javafx.stage.Stage; 

public class Main { 
    public static class Window extends Application { 
     @Override 
     public void start(Stage stage) { 
      stage.show(); 
     } 
    } 

    public static void main(String args[]) { 
     Application.launch(Window.class, args); 
    } 
} 
+0

あなたはそうです! :D私はそれを試したことが絶対に確かでした!ありがとう。何らかの理由でApplication.launchメソッドからWindowインスタンスを取得できるかどうか、またはWindowインスタンスが起動されたばかりのMainクラスに伝える必要があるかどうかを知っていますか? – Kangalioo

+0

@Kangalioo 'start()'(または 'init()')メソッドで 'this'を参照する以外に、' launch() 'によって作成された' Application'クラスのインスタンスを取得することはできません。 –

+0

私の場合、クラスとコンストラクタはpublicでしたが、私は "静的"キーワークが欠けていました。したがって、開始していませんでした。 – Line

関連する問題