无法用Java加载图像

时间:2014-04-24 02:45:00

标签: java swing

我想加载图片并将其用作我的JPanel的Back Ground,此代码不会给我任何错误或结果。

我也尝试使用BufferedImage并将File位置设置为图像的路径,但是我得到了一个错误"无法读取输入文件!",经过一些研究后我发现了这种方法还有一个更容易的选择。

import javax.swing.ImageIcon;
import javax.swing.*;

import java.awt.*;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;

public class drawArea extends JPanel {

public drawArea(){
    init();
}

private void init(){
    setPreferredSize( new Dimension( 570, 570 ) );
    setVisible(true);
}

private void initializeGrid(Graphics g) {

    Graphics2D g2d = (Graphics2D) g;

    Image img = new ImageIcon("/LinearEquations/src/exit.png").getImage();
    g2d.drawImage(img, 0, 0, this);

}

public void paintComponent(Graphics g) {

    super.paintComponent(g);
    initializeGrid(g);
}
}

先谢谢

1 个答案:

答案 0 :(得分:3)

永远不要在paint或paintComponent方法中读取图像。要知道这种方法在很大程度上决定了你的程序的感知响应能力,如果你通过不必要地反复阅读图像来减慢它,你的用户就不会感到高兴。

您的问题可能是使用错误的相对路径。我建议您尝试使用init()方法读取图像并将其存储为变量。不要将其作为文件读取,而是将其作为从类资源获取的InputStream。

如,

public class DrawArea extends JPanel {
  // we've no idea if this is the correct path just yet.
  private static final String IMG_PATH = "/exit.png";

  public DrawArea() { // better have it throw the proper exceptions!
    setPreferredSize( new Dimension( 570, 570 ) ); // not sure about this either
    //  setVisible(true); // no need for this
    img = ImageIO.read(getClass().getResourceAsStream(IMG_PATH));
  }

  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (img != null) {
      g.drawImage(img, 0, 0, this);
    }
  }