设置 JFrame 图标 - 无法在以前的线程中获得建议的解决方案
Setting JFrame icon - can't get suggested solutions in previous threads working
我正在尝试设置一个 JFrame
图标。我已经尝试了所有建议的解决方案 here and here ,但还没有成功。
在我下面的方法中,您可以看到尝试的所有解决方案:
1和2没有设置图标(我还看到了咖啡杯)。
3 和 6 出现此错误:
The method setIconImage(Image) is undefined for the type Icon
4 收到此错误:
java.lang.NullPointerException
5个得到:
Type mismatch: cannot convert from URL to DocFlavor.URL
我的电话 class 在这里:
/Users/lawrence/eclipse-workspace/COA_Application/src/main/java/misc/Icon
我的图片在这里:
/Users/lawrence/eclipse-workspace/COA_Application/Logo.png
(我也试过了COA_Application/src/main/resources/Logo.png
)
我是初学者,如果我速度慢,请见谅。另请注意,我使用的是 mac.
package misc;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.security.GeneralSecurityException;
import javax.imageio.ImageIO;
import javax.print.DocFlavor.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.google.api.services.sheets.v4.model.Color;
public class Icon {
static String filepath = "/Logo.png";
public void showFrame() throws IOException {
JFrame frame = new JFrame("Icon frame");
//method 4
frame.setIconImage(Toolkit.getDefaultToolkit().getImage(this.getClass().getResource(filepath)));
//method 1
//BufferedImage myPicture = ImageIO.read(new File(filepath));
//frame.setIconImage(myPicture);
//method 2
//frame.setIconImage(ImageIO.read(new File(filepath)));
//method 3
//setIconImage(new ImageIcon(filepath).getImage());
//method 5
//URL url = getClass().getResource(filepath);
//frame.setIconImage(imgicon.getImage());
//method 6
//ImageIcon img = new ImageIcon(getClass().getClassLoader().getResource("./icon.png"));
//setIconImage(img.getImage());
JPanel panel = new JPanel();
frame.add(panel);
frame.pack();
frame.setSize(new Dimension(600,600));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) throws Exception {
Icon obj = new Icon();
obj.showFrame();
}
}
图片:
应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。关于如何形成 URL.
的 embedded-resource must be accessed by URL rather than file. See the info page for embedded resource
当然,细节决定成败。用于路径和资源名称的(大写/小写)大小写必须与文件系统上的完全相同。使 getResource(..)
起作用的最简单方法是使用从 class 路径的根开始的路径。指定 'from the root' 是通过在路径前加上 /
.
来完成的
使用最新代码的示例(从 URL 加载图标):
import java.awt.*;
import javax.swing.*;
import java.net.*;
public class Icon {
public void showFrame() throws Exception {
JFrame frame = new JFrame("Icon frame");
URL url = new URL("https://i.stack.imgur.com/bQ8fP.png");
frame.setIconImage(Toolkit.getDefaultToolkit().getImage(url));
frame.pack();
frame.setSize(new Dimension(400,100));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) throws Exception {
Icon obj = new Icon();
obj.showFrame();
}
}
编辑:
鉴于它在这里完美运行,我开始认为问题出在所使用的特定 JRE 上。
I have just built and installed my application and it has the correct icon!
我正在尝试设置一个 JFrame
图标。我已经尝试了所有建议的解决方案 here and here ,但还没有成功。
在我下面的方法中,您可以看到尝试的所有解决方案:
1和2没有设置图标(我还看到了咖啡杯)。
3 和 6 出现此错误:
The method setIconImage(Image) is undefined for the type Icon
4 收到此错误:
java.lang.NullPointerException
5个得到:
Type mismatch: cannot convert from URL to DocFlavor.URL
我的电话 class 在这里:
/Users/lawrence/eclipse-workspace/COA_Application/src/main/java/misc/Icon
我的图片在这里:
/Users/lawrence/eclipse-workspace/COA_Application/Logo.png
(我也试过了COA_Application/src/main/resources/Logo.png
)
我是初学者,如果我速度慢,请见谅。另请注意,我使用的是 mac.
package misc;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.security.GeneralSecurityException;
import javax.imageio.ImageIO;
import javax.print.DocFlavor.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.google.api.services.sheets.v4.model.Color;
public class Icon {
static String filepath = "/Logo.png";
public void showFrame() throws IOException {
JFrame frame = new JFrame("Icon frame");
//method 4
frame.setIconImage(Toolkit.getDefaultToolkit().getImage(this.getClass().getResource(filepath)));
//method 1
//BufferedImage myPicture = ImageIO.read(new File(filepath));
//frame.setIconImage(myPicture);
//method 2
//frame.setIconImage(ImageIO.read(new File(filepath)));
//method 3
//setIconImage(new ImageIcon(filepath).getImage());
//method 5
//URL url = getClass().getResource(filepath);
//frame.setIconImage(imgicon.getImage());
//method 6
//ImageIcon img = new ImageIcon(getClass().getClassLoader().getResource("./icon.png"));
//setIconImage(img.getImage());
JPanel panel = new JPanel();
frame.add(panel);
frame.pack();
frame.setSize(new Dimension(600,600));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) throws Exception {
Icon obj = new Icon();
obj.showFrame();
}
}
图片:
应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。关于如何形成 URL.
的 embedded-resource must be accessed by URL rather than file. See the info page for embedded resource当然,细节决定成败。用于路径和资源名称的(大写/小写)大小写必须与文件系统上的完全相同。使 getResource(..)
起作用的最简单方法是使用从 class 路径的根开始的路径。指定 'from the root' 是通过在路径前加上 /
.
使用最新代码的示例(从 URL 加载图标):
import java.awt.*;
import javax.swing.*;
import java.net.*;
public class Icon {
public void showFrame() throws Exception {
JFrame frame = new JFrame("Icon frame");
URL url = new URL("https://i.stack.imgur.com/bQ8fP.png");
frame.setIconImage(Toolkit.getDefaultToolkit().getImage(url));
frame.pack();
frame.setSize(new Dimension(400,100));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) throws Exception {
Icon obj = new Icon();
obj.showFrame();
}
}
编辑:
鉴于它在这里完美运行,我开始认为问题出在所使用的特定 JRE 上。
I have just built and installed my application and it has the correct icon!