找不到ImageIO错误文件

时间:2013-12-27 08:07:16

标签: java javax.imageio

我正在尝试在绘制Line2D line1的画布上加载jpg图像。我想在线下叠加图像,因为我试图在线做一个对称的数学问题。

我一直没有找到异常错误文件,但是我将我的图像放在java文件本身的主目录中。

任何人都可以帮忙吗?

public SliderControlPaintLine() {
JPanel controlPanel = new JPanel();
controlPanel.setLayout(new GridLayout(2,2));
getContentPane().add(controlPanel, BorderLayout.NORTH);

JLabel label1 = new JLabel("Translate(dx,dy): ");
JLabel label2 = new JLabel("Rotate(Theta,ox,oy): ");
JLabel label3 = new JLabel("Scale(sx,sy)x10E-2:");

controlPanel.add(label1);

slider1 = createSlider(controlPanel, JSlider.HORIZONTAL, 0, 300, 150, 100, 50);
slider2 = createSlider(controlPanel, JSlider.HORIZONTAL, 0, 300, 150, 100, 50);

controlPanel.add(label2);

slider3 = createSlider(controlPanel, JSlider.HORIZONTAL, 0, 360, 0, 90, 45);

getContentPane().add(canvas);

try {
    image = ImageIO.read(new FileInputStream("symmetry.jpg"));
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

setSize(800,700);
setVisible(true);
}

我正在显示我声明并初始化ImageIO的位置。

  class DrawingCanvas extends Canvas {
public DrawingCanvas() {
  setSize(300, 300);
}

public void paint(Graphics g) {


  super.paint(g);   
  g.drawImage(image, 0, 0, this);
  Graphics2D g2D = (Graphics2D) g;

  g2D.translate(transX, transY);
  g2D.rotate(rotateTheta, rotateX, rotateY);
  g2D.scale(scaleX, scaleY);
  BasicStroke stroke = new BasicStroke(width);
  g2D.setStroke(stroke);
  Line2D line1 = new Line2D.Float(100f, 200f, 500f, 200f);
  g2D.draw(line1);
}
}

4 个答案:

答案 0 :(得分:0)

确保您当前的工作目录是带有图像文件的目录。您可以通过调用以下内容获取当前目录:

System.getProperty("user.dir")

您也可以使用绝对路径来确保正确的路径。 您可以通过以下方式获取程序的路径:

 MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()

答案 1 :(得分:0)

你使用哪个IDE?您需要将symmetry.jpg文件放入工作目录。这主要在运行时设置中配置。

答案 2 :(得分:0)

try {
        image = ImageIO.read(new File(getClass().getResource("symmetry.jpg").toURI()));
    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

谢谢大家的评论。我设法使用它来显示图像。 :)

答案 3 :(得分:0)

尝试

ImageIO.write(new BufferedImage(10, 10, BufferedImage.TYPE_3BYTE_BGR), "jpg", new File("symmetry2.jpg"));

并查看文件的写入位置。这就是你必须放置symmetry.jpg

的地方