比较方法冲突和堆栈溢出



我正在尝试显示图像(作为JLabel的图像图标)。当我不尝试显示图像时,一切正常,即:

for (int i=0;i<value;i++)
    {
        for (int j=0;j<value;j++)
        {
            c.gridx=i;
            c.gridy=j;
            JLabel element = new JLabel("!");
            pane.add(element,c);
        }
    }

但是,如果我这样做:

for (int i=0;i<value;i++)
    {
        for (int j=0;j<value;j++)
        {
            c.gridx=i;
            c.gridy=j;
            JLabel element = new JLabel();
            element.setIcon(wall);
            pane.add(element,c);
        }
    }

它将产生大量的错误消息。控制台输出:http://pastebin.com/teuuWjRX

代码:(粘贴版本,语法突出显示:http://pastebin.com/2utFJ0UM)

package tut;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
public class Main extends JFrame{
//private static int value;
public Main()
{
    int value=151;//151
    ImageIcon wall = new ImageIcon();
    try
    {
        BufferedImage tempImage = ImageIO.read(this.getClass().getResource(("/resources/images/test.png")));
        wall = new ImageIcon(tempImage.getScaledInstance(4, 4, Image.SCALE_DEFAULT));
    }
    catch (IOException e){}
    Container pane = getContentPane();
    pane.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    for (int i=0;i<value;i++)
    {
        for (int j=0;j<value;j++)
        {
            c.gridx=i;
            c.gridy=j;
            JLabel element = new JLabel();
            element.setIcon(wall);
            pane.add(element,c);
        }
    }
    //Main Frame
    setTitle("Example1");
    setSize(value*8,value*8);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main (String[] args)
{
    Main test1= new Main();
}
}

我的问题是:

  • 为什么相比之下会引发例外?(一切似乎都从我的角度来看很好)
  • 堆栈溢出问题是否会导致每个时间对象声明?(因为我在循环中没有看到任何其他问题)。

PS:getScaledInstance可以使用还是有更好的方法?

任何帮助将不胜感激。

编辑:总的来说,我没有发现代码有任何真正的问题,我唯一能说的问题不在于缩放。解析没有缩放的小尺寸图像(如 8x8 或 4x4)也会产生错误,但是对于解析大小为 16x16 或更高的图像或缩放到 16x16 的图像,一切都很好。在布局中放置/添加小尺寸图像(即元素)可能是个问题。

您正在使用wall作为图标。wall是在 try 块中创建的,您甚至不会记录引发的异常。

问题可能在这里:也许您在创建图标时提出了异常(IOException),但您看不到它。


您可以尝试使用 JLabel 构造函数public JLabel(Icon image)而不是空构造函数

阿波罗

相关内容

  • 没有找到相关文章

最新更新