所有人。
我是Java的新手,用UI制作培训项目。在培训过程中,我决定从资源中加载图标,并将其加载到不同的类中。有麻烦了。我真的很想自己找到答案,但是not.Code大声说。
主班
package scv.paul;
…
/**
* Create the application.
*/
public TestApp() {
Logger.getLogger(loggerName).fine("Showing main window");
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setTitle("Test App");
**frame.setIconImage( MyImages.appIcn.getImage());**//here try to load icon得到例外:
线程“AWT 0”java.lang.ExceptionInInitializerError中的异常
效用类
package scv.paul;*
import javax.swing.ImageIcon;
public class MyImages {
public static final ImageIcon appIcn = new ImageIcon ( MyImages.class.getResource ( "AppIcon.png" ) );
public static final ImageIcon BtnIcn = new ImageIcon ( MyImages.class.getResource ( "OK.png" ) );
public static final ImageIcon exitIcn = new ImageIcon ( MyImages.class.getResource ( "door.png" ) );
}图像位于"\bin“文件夹中
我了解到在初始化静态字段时存在的问题。但不能理解原因。
如果我调用这样的静态字段,我就会得到这个错误。
public static final String imgPath = System.getProperties().getProperty("user.dir")+"\\img\\";但是,如果调用main类(这个静态字段),则没有错误。
public static final String imgPath = "c://myProjectPath//bin";我也找不到如何在好的空间里使用资源的方法。我能在哪里读到?
发布于 2016-10-20 15:36:14
不要为这样的事情使用静态变量。没有必要保留对图标的引用。只需阅读图标并将其添加到您的按钮。
只需在类的构造函数中加载图像(当您创建按钮时)。有关更多信息和工作示例,请参阅关于如何使用图标的Swing教程中的部分。
本教程还将向您展示如何更好地构造代码,以便在事件分发线程上创建Swing组件。
保存一个教程的链接,方便其他秋千基础。
发布于 2016-10-20 23:31:48
将图像放在项目目录中,例如bin和src文件夹所在的位置。
最好是使用静态方法来读取文件,以防文件失败。假设您的资源文件夹位于名为resources的目录中,您的代码将如下所示。
public static ImageIcon makeImageIcon(String filename) {
BufferedImage myPicture = null;
try {
myPicture = ImageIO.read(new File("resources/" + filename));
} catch (IOException e) {
e.printStackTrace();
}
return new ImageIcon(myPicture);
}然后用您想要的文件名按照上面所做的方式调用它。
public static ImageIcon image= makeImageIcon("myImage.png");希望这能有所帮助。
https://stackoverflow.com/questions/40158640
复制相似问题