Как изменить иконку у jar с чашкой кофе?

451
26 ноября 2016, 19:22

Добрый день, пытаюсь сменить у jar файла иконку. Для этого использую данную конструкцию

public class Main extends JFrame {
   public static void main(String[] args){
 Main.setIconImage(Toolkit.getDefaultToolkit().getImage(this.getClass().getClassLoader().getResource("src/resources/imagesi/mylogo.png")));
 }

но почему то постоянно подчёркивает красным this. и пишет

Cannot use this in a static context

Answer 1

Если честно, первым делом хочется просто отправить в ближайший онлайн-переводчик. Машина вам напрямую выдала фразу "... static ...", из которой и так все ясно.

Ваш код внутри main выполняется вне какого-либо экземпляра класса - main является статичным методом. Поэтому this в этом контексте в принципе не существует, о чем вам и говорит машина.
Для решения проблемы достаточно обратиться к классу по имени, а не через this.getClass()

Main.class.getClassLoader().getResource("src/resources/imagesi/mylogo.png")

Отдельно замечу, что ресурс, скорее всего, у вас будет доступен как imagesi/mylogo.png без префикса src/resources.

Answer 2

Полный пример готового решения №1:

import java.awt.Toolkit;
import javax.swing.JFrame;
public class Main1 extends JFrame {
    /**
     * 
     */
    private static final long serialVersionUID = -4465997357046781244L;
    public static void main(String[] args) {
        final Main1 instance = new Main1();
        /**
         * Относительный адрес файла изображения. Относительно местоположения
         * файла-класса.
         */
        final String imgPath = "imagesi\\mylogo.png";
        instance.setIconImage(
                Toolkit.getDefaultToolkit().getImage(Main1.class.getResource(imgPath)));
        instance.setVisible(true);
    }
}

Полный пример готового решения №2:

import java.awt.Toolkit;
import java.io.File;
import javax.swing.JFrame;
public class Main2 extends JFrame {
    /**
     * 
     */
    private static final long serialVersionUID = -7810262901547572556L;
    public static void main(String[] args) {
        final Main2 instance = new Main2();
        instance.setIconImage(
                Toolkit.getDefaultToolkit().getImage(new File("resources/imagesi/mylogo.png").toString()));
        instance.setVisible(true);
    }
}
READ ALSO
Не вызывается метод onCreate()

Не вызывается метод onCreate()

Хочу хранить состояние некоторых объектов и что бы эти объекты были доступны всюду

262
Чётные числа в массиве

Чётные числа в массиве

Не могу разобраться, как в консоли вывести элементы массива: все чётные числа от 1 до 20Помогите, пожалуйста

311
Stringer Java Obfuscator подключить в Android Studio

Stringer Java Obfuscator подключить в Android Studio

Здравствуйте, взял триал такого продукта как "Stringer Java Obfuscator", но теперь битый час пытаюсь использовать его плагин stringer-gradle-pluginjar чтобы создавать...

363
Динамический перевод текста

Динамический перевод текста

Мне в приложении нужно динамически переводить текст с английского на русский, почитала, что есть Google Translate API, но он платный, есть какие-то...

182