我的java applet和图形有问题。我试图在Eclipse中运行它,它失败了。 我是java的新手,我希望你能帮助我。 我有两个文件:Say.java和SayWhat.java。 Say.java:
public class Say {
SayWhat word = new SayWhat("Hello World");
}
SayWhat.java:
import java.applet.Applet;
import java.awt.Graphics;
@SuppressWarnings("serial")
public class SayWhat extends Applet {
Graphics g;
String what;
public SayWhat(String what) {
this.what=what;
}
public void paint(Graphics g){
g.drawString(what, 20, 20);
}
}
出现的错误是:
load: SayWhat.class can't be instantiated.
java.lang.InstantiationException: SayWhat
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at sun.applet.AppletPanel.createApplet(Unknown Source)
at sun.applet.AppletPanel.runLoader(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
你能告诉我我做错了吗?
答案 0 :(得分:10)
applet需要有一个公共的无参数构造函数(通过具有显式的公共no-arg构造函数,或者根本没有显式的构造函数;在后一种情况下,编译器将提供一个公共的无参数构造函数作为默认值)。你的班级唯一的构造函数是一个论点:
public SayWhat(String what) {
因此,如果没有该参数,则无法实例化该类,因此不能将其用作applet。
答案 1 :(得分:1)
查看java.lang.InstantiationException
的文档有两种可能的原因:
1)代码和对象属性都在标记中指定:
<APPLET code=MyApplet object=MyApplet.ser width=100 height=100>
</APPLET>
Sun JRE可以访问代码或对象属性,但不能同时访问两者。
2)在标签中指定了代码属性,并在标签中指定了对象属性:
<APPLET code=MyApplet width=100 height=100>
<PARAM name="object" value="someValue">
</APPLET>
public class MyApplet extends java.applet.Applet
{
public void init()
{
String value = getParameter("object");
}
....
}
编辑:添加default constructor,如下所示:
public SayWhat() {}
答案 2 :(得分:1)
类SayWhat
应该有一个没有参数的公共构造函数。