applet中存在构造函数会引发异常

时间:2011-06-22 17:49:59

标签: java constructor applet japplet

我正在运行以下小程序。在其中,当我添加构造函数(甚至为空)时,applet会抛出运行时异常:

MainFrame.class can't be instantiated, java.lang.InstantiationException 

如果删除构造函数,则抛出没有异常。我不能在applet中有一个构造函数吗?

public class MainFrame extends JApplet implements  WindowListener, ActionListener {
    public void init()
    {       
        System.out.println("Applet Step1");
        String[] args = null;
        createAndShowGUI(args);      
    }
    private static void createAndShowGUI(String[] args) { /*code*/ }
    public MainFrame(final String[] args) {}
}

3 个答案:

答案 0 :(得分:6)

您还需要添加默认构造函数...

public MainFrame() {}

答案 1 :(得分:3)

您需要一个默认构造函数,因为您的类的实例将由浏览器本身(或将此任务委派给jre的appletviewer或插件的浏览器)实例化。

由于浏览器对您的类一无所知,因此在所有Applet类上工作的唯一方法是使用一组标准参数对它们进行实例化。而且,对于applet,这组参数很简单:空集。

所以,你需要在你的类中有一个默认的(没有params)构造函数。

之后,@ Rocky Triton是对的:在java中,如果你没有在类中提供任何构造函数,java将为它提供一个默认的构造函数。但是只要你提供一个构造函数,无论它是什么,java都不再提供默认的构造函数(正如你所说,在某种程度上,你将负责你的类的实例化)。

因此,在您的情况下,如果您决定为构造函数提供参数,则java将不提供默认构造函数,并且浏览器将无法实现您的类。

此致 斯特凡

答案 2 :(得分:0)

我相信您也应该可以更改: 公共MainFrame(final String [] args){}

至: 公共MainFrame(String ... args){}

这允许您不需要传递args即可构造它。