不是子类错误

时间:2014-11-13 09:45:06

标签: java

import javafx.application.Application;    
import javafx.scene.Scene;    
import javafx.scene.control.Button;   
import javafx.scene.control.TextField;  
import javafx.scene.layout.BorderPane;  
import javafx.stage.Stage;

public class Calc {  

  public class Gui extends Application{  
    @Override  
    public void start(Stage stage){  
        TextField mainText = new TextField();  

        BorderPane pane = new BorderPane();
        pane.setTop(mainText);

        Scene scene = new Scene(pane);
        stage.setTitle("Calculator");
        stage.setScene(scene);
        stage.show();
    }
 }

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

当我尝试执行该程序时,我收到此错误:

Exception in thread "main" java.lang.RuntimeException: Error: class Calc is not a subclass of javafx.application.Application at javafx.application.Application.launch(Application.java:211) at Calc.main(Calc.java:56)

当导入的范围超过Calc类时,我不明白它不是子类,这意味着那些子类应该能够使用它们。

1 个答案:

答案 0 :(得分:6)

  

当导入的范围超过Calc类时,我不明白它是如何不是子类的,这意味着它们的子类应该能够使用它们。

子类化和导入完全不同的东西。它抱怨你的Calc类声明为:

public class Calc

而不是

public class Calc extends Application

现在您的Gui类是Application的子类 - 但正如您从错误消息中看到的那样,JavaFX并未尝试启动Gui,而是尝试启动Calc 1}}。

就我个人而言,我建议删除额外的课程,只是 Calc Application main start方法(用于启动)和Gui方法。或者,您可以明确指定public static void main(String args[]){ Application.launch(Gui.class, args); } 类:

Gui

...但是你想要制作staticCalc,这样它才能真正拥有无参数构造函数。 (目前您需要一个Gui的实例才能创建{{1}}的实例,因为它是一个内部类。)