Java: ошибка: невозможно сослаться на это до вызова конструктора супертипа - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь добавить конструктор к javax.swing.ImageIcon. Он должен разрешить структуру каталогов, чтобы иметь возможность доступа к классу ImageIcon как к карте изображений.

Я пытаюсь сделать:

public class CPImageIcon extends ImageIcon {

    public CPImageIcon(String name) {

        super(this.getClass().getResource("/desktopapplication1/resources/" + name), "description");
    }

, но это приводит к:

warning: [options] bootstrap class path not set in conjunction with -source 1.7
I:\DesktopApplication1\src\desktopapplication1\CPImageIcon.java:18: error: cannot reference this before supertype constructor has been called
        super(this.getClass().getResource("/desktopapplication1/resources/" + name),"");

Если я попытаюсь превзойти другие конструкторы, это сработает.

1 Ответ

2 голосов
/ 28 мая 2020

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

this представляет текущий экземпляр и не может использоваться перед вызовом super.

Вы можете использовать следующий подход, прокомментировал или раскомментировал:

import javax.swing.*;

public class CPImageIcon extends ImageIcon {

    public CPImageIcon(String name) {
        super(CPImageIcon.class.getResource("/desktopapplication1/resources/" + name), "description");
//        super(Thread.currentThread().getContextClassLoader().getResource("/desktopapplication1/resources/" + name), "description");
    }
}
...