Java JFrame ImageIcon Проблема - JFrame.super.setIconImage () Говорит, что изображение равно пустой строке - PullRequest
0 голосов
/ 13 декабря 2018

Я работаю над игрой с небольшой командой, и они открыли заявку на изменение IconImage, которая принимает объект ImageIcon.

Я создаю объект ImageIcon с помощью java.net.URL, указывающего на местоположение файла в CLASSPATH.Затем я создаю объект Image из ImageIcon.getImage ().

Позже в программе я передаю упомянутый выше объект Image в jframe.setIconImage ();

Если я запускаюВ отладочной программе я вижу правильный путь к изображению, отражающий его место в CLASSPATH, но значок не меняется.Если я захожу в jframe.setIconImage (), я попадаю в точку, где JFrame.java вызывает JFrame.super.setIconImage (), но значение изображения, передаваемого суперклассу, равно "" (пустая строка).

У меня есть код в основном классе, структура папок src, структура папок out / bin и изображение значения, передаваемого в виде пустой строки.

Любой совет очень ценится и благодарит зазаранее за ваше время.

== Код ==

package orsc;

import orsc.Config;

import javax.swing.*;
import java.applet.Applet;
import java.awt.*;
import java.io.File;

public class ORSCFrame extends ORSCApplet {

    private static final long serialVersionUID = 1L;

    public String getCacheLocation() {
        return Config.F_CACHE_DIR + File.separator;
    }

    public static void main(String[] args) {
        JFrame jframe = new JFrame(Config.SERVER_NAME);
        ImageIcon orscIcon = new ImageIcon(ORSCFrame.class.getResource("icon.png"));
        Image orscIconImage = orscIcon.getImage();

        final Applet applet = new ORSCFrame();
        applet.setPreferredSize(new Dimension(512, 334 + 12));
        jframe.getContentPane().setLayout(new BorderLayout());
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jframe.getContentPane().add(applet);
        jframe.setResizable(true);
        jframe.setVisible(true);
//      jframe.setAlwaysOnTop(true);
        jframe.setBackground(Color.black);
        jframe.setMinimumSize(new Dimension(512, 334 + 12));
        jframe.setIconImage(orscIconImage);
        jframe.pack();
        jframe.setLocationRelativeTo(null);

        applet.init();
        applet.start();
//      jframe.add(applet);
    }

    @Override
    public void playSound(byte[] soundData, int offset, int dataLength) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void stopSoundPlayer() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    } 
}

== папка src ==

enter image description here

== папка out / bin ==

enter image description here

== шаг в строку 33 (jframe.setIconImage (orscIconImage);) ==

enter image description here

== рис. Jframe ==

enter image description here

...