Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在导出jar时,如何设置jframe的图标而不必将图标放在桌面上?_Java_Swing_Jframe_Embedded Resource_Imageicon - Fatal编程技术网

Java 在导出jar时,如何设置jframe的图标而不必将图标放在桌面上?

Java 在导出jar时,如何设置jframe的图标而不必将图标放在桌面上?,java,swing,jframe,embedded-resource,imageicon,Java,Swing,Jframe,Embedded Resource,Imageicon,我想将java游戏的图标设置为一个名为lgico.png的图标,但当我使用: staticimageicon-icon=newimageicon(“lgico.png”); 公共窗口(整数宽度、整数高度、字符串标题、游戏){ frame.setIconImage(icon.getImage()); } 当我创建jar文件并将其放在桌面上时,它没有图标 以下是我的window课程的全部内容: package com.teto.main; 导入java.awt.Canvas; 导入java.awt

我想将java游戏的图标设置为一个名为lgico.png的图标,但当我使用:

staticimageicon-icon=newimageicon(“lgico.png”);
公共窗口(整数宽度、整数高度、字符串标题、游戏){
frame.setIconImage(icon.getImage());
}
当我创建jar文件并将其放在桌面上时,它没有图标

以下是我的window课程的全部内容:

package com.teto.main;
导入java.awt.Canvas;
导入java.awt.Cursor;
导入java.awt.Dimension;
导入javax.swing.ImageIcon;
导入javax.swing.JFrame;
公共类窗口扩展画布{
私有静态最终长serialVersionUID=5486926782194361510L;
静态图像图标=新图像图标(“lgico.png”);
光标csr=新光标(光标.十字线\光标);
公共窗口(整数宽度、整数高度、字符串标题、游戏){
JFrame=新JFrame(标题);
frame.setPreferredSize(新尺寸(宽度、高度));
框架。设置最大尺寸(新尺寸(宽度、高度));
框架。设置最小尺寸(新尺寸(宽度、高度));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setresizeable(false);
frame.setLocationRelativeTo(空);
frame.add(游戏);
frame.setVisible(true);
frame.setIconImage(icon.getImage());
frame.setCursor(csr);
game.start();
}
}
我曾多次尝试在这个网站上寻找解决方案,但都遇到了NullPointerException,而我的程序是一个没有任何内容的白色屏幕

我很抱歉,如果我试图表达的不是很清楚,因为我的母语不是英语

  • 不要扩展画布。您没有向Canvas类添加功能,因此没有理由扩展它

  • 不要把你的课叫作“窗口”。是具有该名称的AWT类。类名应该是描述性的

  • 如果您使用的是jar文件,则可能需要将图像作为资源加载:

  • 以下是一个基本示例:

    import javax.swing.*;
    import java.net.*;
    
    class FrameIconFromMain
    {
        public static void main(String[] args)
        {
            Runnable r = new Runnable()
            {
                public void run()
                {
                    JFrame f = new JFrame("Frame with icon");
                    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    
                    String imageName = "dukewavered.gif";
                    URL imageUrl = f.getClass().getResource(imageName);
    
                    if (imageUrl == null)
                    {
                        System.out.println("imageUrl not found using default classloader!");
                        imageUrl = Thread.currentThread().getContextClassLoader().getResource(imageName);
                    }
    
                    ImageIcon icon = new ImageIcon( imageUrl );
                    f.setIconImage( icon.getImage() );
                    f.setSize(400,300);
                    f.setLocationRelativeTo( null );
                    f.setVisible( true );
                }
            };
    
            SwingUtilities.invokeLater(r);
        }
    }
    

    应用程序资源在部署时将成为嵌入式资源,因此现在就开始访问它们是明智的。必须通过URL而不是文件访问。有关如何形成URL的信息,请参阅。我遇到了这个错误:
    线程“main”java.lang.NullPointerException中的异常位于javax.swing.ImageIcon。(未知源代码)位于com.teto.main.FrameInGame。(FrameInGame.java:27)位于com.teto.main.Game。(Game.java:25)位于com.teto.main.Game.main(Game.java:209)
    我可能只是在目录中键入了错误的内容,或者是idkok的某个东西,我已经修复了它,但现在我在控制台中得到了“imageUrl未使用默认类加载器找到!”字符串,我不完全确定这到底意味着什么(我是java新手)nvm我让它工作了,你不知道你刚才让我有多高兴,我一整天都在努力使这项工作顺利进行