класс не может быть создан - PullRequest
3 голосов
/ 25 января 2012

У меня проблема с Java-апплетом и графикой. Я пытаюсь запустить его в 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)

Подскажите, пожалуйста, что я делаю не так?

Ответы [ 3 ]

10 голосов
/ 25 января 2012

Апплет должен иметь открытый конструктор без аргументов (либо с помощью явного открытого конструктора без аргументов, либо вообще без явных конструкторов; в последнем случае компилятор предоставит открытый конструктор без аргументов) по умолчанию). Единственный конструктор вашего класса принимает аргумент:

public SayWhat(String what) {

поэтому класс не может быть создан без этого аргумента, поэтому его нельзя использовать в качестве апплета.

1 голос
/ 25 января 2012

Класс SayWhat должен иметь открытый конструктор без аргументов.

1 голос
/ 25 января 2012

Проверьте документацию для 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");
        }
        ....
}

РЕДАКТИРОВАТЬ : Добавить конструктор по умолчанию , как показано ниже:

public SayWhat() {}
...