Наличие конструктора в апплете выдает исключение - PullRequest
3 голосов
/ 22 июня 2011

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

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

Если я удалю конструктор, исключение не будет брошено. Разве я не могу иметь конструктор в апплете?

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 ]

6 голосов
/ 22 июня 2011

Вам тоже нужно добавить конструктор по умолчанию ...

public MainFrame() {}
3 голосов
/ 22 июня 2011

Вам нужен конструктор по умолчанию, поскольку экземпляры вашего класса будут создаваться самим браузером (или браузером, делегирующим эту задачу jre's appletviewer или плагину).

Поскольку браузер ничего не знает о вашем классе, единственный способ для него работать со всеми классами апплетов - создавать их со стандартным набором параметров.А для апплетов этот набор параметров прост: пустой набор.

Итак, в вашем классе должен быть конструктор по умолчанию (без параметров).

И после этого, @Роки Тритон прав: в java, если вы не предоставляете никакого конструктора в классе, java предоставит ему конструктор по умолчанию.Но как только вы предоставляете конструктор, каким бы он ни был, java больше не предоставляет конструктор по умолчанию (как вы говорите, в некотором роде вы становитесь ответственным за создание экземпляра вашего класса).

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

С уважением, Стефан

0 голосов
/ 26 октября 2018

Полагаю, вы также сможете изменить: public MainFrame (конечная строка [] args) {}

в: public MainFrame (String ... args) {}

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

...