我将在Eclips中运行以下应用程序,但它没有显示imageIcon。我将我的图像放在不同的文件夹中,但它确实有效。 我的程序没有出错,但只显示文本标签,而不是图片标签。 请你帮助我好吗 ? 提前谢谢。
package GUIpackage;
import java.awt.BorderLayout;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JFrame;
public class LabelDemo
{
public static void main( String[] args )
{
JLabel northLabel = new JLabel( "North" );
ImageIcon labelIcon = new ImageIcon( "bug1.png" );
JLabel centerLabel = new JLabel( labelIcon );
JFrame application = new JFrame();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
application.add( northLabel, BorderLayout.NORTH );
application.add( centerLabel, BorderLayout.CENTER );
application.setSize( 300, 300 ); // set the size of the frame
application.setVisible( true ); // show the frame
}
}
答案 0 :(得分:0)
只有在Eclipse中的不同文件夹中移动图像才会使图像无法访问。要检索图像,您需要使用ClassLoader编写加载器方法。
你所做的基本上是用NullPointer创建你的labelIcon,然后通过调用loader方法为它分配实际的ImageIcon:
ImageIcon labelIcon = null;
try {
labelIcon = loadIcon("bug1.png");
} catch (Exception e) {
// TODO: handle exception
}
我在代码上工作了一点,这将是一个有效的解决方案:
import java.awt.BorderLayout;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JFrame;
public class LabelDemo {
public static void main(String[] args) {
LabelDemo ld = new LabelDemo();
}
public LabelDemo() {
JLabel northLabel = new JLabel("North");
ImageIcon labelIcon = null;
try {
labelIcon = loadIcon("bug1.png");
} catch (Exception e) {
// TODO: handle exception
}
JLabel centerLabel = new JLabel(labelIcon);
JFrame application = new JFrame();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.add(northLabel, BorderLayout.NORTH);
application.add(centerLabel, BorderLayout.CENTER);
application.setSize(300, 300); // set the size of the frame
application.setVisible(true); // show the frame
}
public ImageIcon loadIcon(String iconName) throws IOException {
ClassLoader loader = this.getClass().getClassLoader();
BufferedImage icon = ImageIO.read(loader.getResourceAsStream(iconName));
return new ImageIcon(icon);
}
}
要使此代码正常工作,您需要将图像放入Eclipse中的src
文件夹。
在您的示例中,您需要创建LabelDemo的实例,否则您将无法调用this.getClass().getClassLoader();
,因为您无法在静态方法中使用this
。
希望我能帮到你