2014-02-12 2 views
4

У меня есть основной класс, который должен вызывать приложение JavaFX (SimpleSun) для получения информации от пользователя. В настоящее время я создаю Object класса JavaFX и запускаю его, но это, похоже, не работает. Кто-то видит ошибку в моей работе?Попытка вызова приложения JavaFX из Java ... NoSuchMethodException

Вот мой код и исключение: Main.java:

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(); } 

В качестве альтернативы вы можете передать String параметры класса с launch(args) и получить их обратно в SimpleSun класса с getParameters().

+0

Ну, я не ожидал, что ... Приложение не работает без пустого конструктора, похоже :-(Мне просто нужно было добавить пустой конструктор, и все работает отлично ... проклятые маленькие ошибки ... – NexusTeddy

+0

Нет, пусковая установка использует отражение для создания экземпляра с конструктором c = appClass.getConstructor(); '(т. Е. Ищет конструктор по умолчанию). – assylias

Смежные вопросы