2014-02-12 1 views
4

사용자로부터 정보를 얻기 위해 JavaFX 응용 프로그램 (SimpleSun)을 호출해야하는 주 클래스가 있습니다. 현재 JavaFX 클래스의 Object를 만들고 시작하지만 작동하지 않습니다. 누군가 내 작업에서 실수를 보는가? Main.java :자바에서 JavaFX 응용 프로그램을 호출하는 중 ... NoSuchMethodException

여기에 내 코드와 예외의

package ch.i4ds.stix.sim; 

import ch.i4ds.stix.sim.grid.config.Configuration; 
import ch.i4ds.stix.sim.grid.config.ConfigurationFromFile; 


    public class Main{ 
    Configuration config; 
    public static void main(String[] args) { 
     ConfigurationFromFile config = new ConfigurationFromFile(); 
     SimpleSun ss = new SimpleSun(config); 
     ss.show(); 
    } 
} 

SimpleSun.java :

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Scene; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 
import ch.i4ds.stix.sim.grid.config.Configuration; 
import ch.i4ds.stix.sim.grid.config.ConfigurationFromFile; 

public class SimpleSun extends Application{ 

    private Stage primaryStage; 
    Configuration configuration; 

    public SimpleSun(ConfigurationFromFile config) { 
     this.configuration = config; 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     this.primaryStage = primaryStage; 
     this.primaryStage.setTitle("Simple Sun - Alpha"); 
     System.out.println("Test"); 
     try { 
      // Load the root layout from the fxml file 
      FXMLLoader loader = new FXMLLoader(
        Main.class.getResource("view/RootLayout.fxml")); 
      BorderPane rootLayout = (BorderPane) loader.load(); 
      Scene scene = new Scene(rootLayout); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch (IOException e) { 
      // Exception gets thrown if the fxml file could not be loaded 
      e.printStackTrace(); 
     } 
    } 

    public void show(){ 
     launch(); 
    } 

} 

예외 : 당신은 인수가없는 생성자를 제공해야합니다

Exception in Application constructor 
Exception in thread "main" java.lang.RuntimeException: Unable to construct Application instance: class ch.i4ds.stix.sim.SimpleSun 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl.access$000(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl$1.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NoSuchMethodException: ch.i4ds.stix.sim.SimpleSun.<init>() 
    at java.lang.Class.getConstructor0(Unknown Source) 
    at java.lang.Class.getConstructor(Unknown Source) 
    ... 4 more 

답변

9

당신이 응용 프로그램을 확장 할 때.

public class SimpleSun extends Application { 

    private Stage primaryStage; 
    Configuration configuration; 

    public SimpleSun() { 
     this.configuration = Main.getConfig(); 
    } 
    //... 

하고 Main 클래스 :

public static Configuration getConfig() { return new ConfigurationFromFile(); } 

는 다른 방법이 launch(args)와 클래스에 String 매개 변수를 전달할 수 있으며, getParameters()로 다시 SimpleSun 클래스에서 그들을 얻을 그래서 당신은 뭔가를 할 수 있습니다.

+0

글쎄, 나는 그것을 기대하지 않았다. 응용 프로그램은 빈 생성자 없이는 작동하지 않는다. :-(나는 단지 빈 생성자를 추가해야만한다. 그리고 그것은 모두 잘 작동한다 ... 저주받은 작은 실수 ... – NexusTeddy

+0

아니요, 실행 프로그램은 리플렉션을 사용하여'Constructor c = appClass.getConstructor();'(즉 기본 생성자를 찾습니다) 인스턴스를 만듭니다. – assylias

관련 문제