Я работаю над проектом, в котором будет много приложений JavaFX со схожей, но достаточно различной функциональностью, поэтому я создал абстрактный базовый класс, расширяющий Application для обработки общих функций и определяющий, что им нужно делать, икуча конкретных классов, которые расширяют этот.Тем не менее, когда я пытаюсь запустить, я получаю
Исключение в конструкторе приложения java.lang.reflect.InvocationTargetException в java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в java.,.Method.invoke (Method.java:564) в javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:473) в javafx.graphics/com.sun.javafx.application.llaunchher(LauncherImpl.java:372) в java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMetbasejjj)/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.base / java.lang.reflect.Method.invoke (Method.java:564) в java.base / sun.launcher.LauncherHelper $ FXHelper.main (LauncherHelper.java:941) Причина: java.lang.RuntimeException: Невозможно создать приложениеЭкземпляр: класс.java: 198) в java.base / java.lang.Thread.run (Thread.java:844). Вызывается: java.lang.InstantiationException в java.base / jdk.internal.reflect.InstantiationExceptionConstructorAccessorImpl.newInstanceExmpIstIst: 48) в java.base / java.lang.reflect.Constructor.newInstance (Constructor.java:488) в javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:875)в javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(PlatformImpl.java:449) в javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda $ runLater $ 9 (PlatformImpl.java:418) в java.base / java.security.AccessController.doPrivileged (собственный метод) в javafx.graphics/com.sun.javafx.application.PlatformImpl.lambdarunLater $ 10 (PlatformImpl.java:417) на javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) на javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop (собственный метод) по адресу javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175) ... еще 1 исключение при запуске приложения ccs.CCS
Это суть базового класса:
public abstract class Tool extends Application {
public CCS ccs;
public abstract String getLongName();
public abstract String getShortName();
public abstract String getVersion();
public void start(Stage primaryStage) {
try {
primaryStage.setTitle("[Company] " + getLongName() + " v" + getVersion());
Scene scene = new Scene(build(primaryStage), 200, 100);
primaryStage.setScene(scene);
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
public abstract Parent build(Stage stage);
public static void main(String[] args) {
launch(args);
}
@Override public void stop() { ccs.openTools.remove(getLongName()); }
}
И все расширения сейчас выглядят так:
public class ACT extends Tool {
public String getLongName() {return "[Tool name]"; }
public String getShortName() {return "ACT"; }
public String getVersion() {return "α.0";}
public Parent build(Stage stage) {
BorderPane root = new BorderPane();
Button b = new Button("Do "+getShortName()+" stuff");
b.setOnMouseClicked((e) -> {
System.out.println(getShortName()+" stuff");
});
root.setCenter(b);
return root;
}
}
Все зависимости и все в порядке.Когда я вместо этого заставляю их расширять Application и копировать общие функциональные возможности из базового класса, они работают отлично.Кто-нибудь знает, что происходит?