我正在运行以下小程序。在其中,当我添加构造函数(甚至为空)时,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) {}
}
答案 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即可构造它。