在java中显示图像时出错。AWT-EventQueue-0错误
执行我的代码时,此代码存在错误问题:在java中显示图像时出错。AWT-EventQueue-0错误,java,Java,执行我的代码时,此代码存在错误问题: ok.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String path = ""; String extension = ""; JFileChooser fil
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String path = "";
String extension = "";
JFileChooser fileChooser = new JFileChooser();
int returnValue = fileChooser.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
path = selectedFile.getAbsolutePath();
int i = path.lastIndexOf('.');
if (i >= 0) {
extension = path.substring(i+1);
}
}
try {
if (extension.equals("ppm")) {
Paint.imgs.add(new ppm(path));
img.setImage(resize(Paint.imgs.get(Integer.parseInt(path)).img, 544, 372));
img.repaint();
}
} catch (IOException ex) {
Logger.getLogger(getName()).log(Level.SEVERE, null, ex);
}
}
});
特别是使用行img.setImage(resize(Paint.imgs.get(Integer.parseInt(path)).img,544372));
看起来图像的路径是正确的,所以我不知道为什么它不起作用。
输出为:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "C:\Users\ciola\Desktop\pb.ppm"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at paint.binar$1.actionPerformed(binar.java:435)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
...
有没有办法解决这个问题?代码的逻辑有问题。正如上面所写的那样:
- 获取文件的绝对路径名
- 找到分机
- 如果扩展名为“ppm”:
- 将图像加载到缓存中(我猜这就是
的目的Paint.imgs.add(新ppm(路径))
- 使用
作为索引从缓存中获取图像path
- 将图像加载到缓存中(我猜这就是
- 如果路径名确实包含与缓存索引方案相对应的唯一编号,则在解析之前修改
以从get(Integer.parseInt(path))
提取唯一编号path
- 如果没有,则需要以其他方式执行图像缓存查找
建议:为了避免这样的问题,你需要有一个清晰的思维模型来描述你的代码实际应该如何工作
@ControlAltDel,那么,它不工作了。红色下划线 这强烈地表明,您通过尝试一些更改来消除编译错误,从而达到了现在的目的。这种方法有时有效:有时,您会很幸运!但它通常会导致一个毫无意义的程序……并且在您尝试运行该程序时会出现运行时错误
更好的办法是理解编译器告诉您的内容,然后理解错误的真正性质。编译器(或IDE)不理解您试图做什么。它的“建议”就是这样。选择哪种(如果有的话)取决于您做出理性的决定接受。在路径上调用Integer.parseInt是错误的。这肯定是错误的wrong@ControlAltDel,则它不起作用。红色下划线。这是因为您试图引用数组中的某些内容。我不知道您希望如何从文件路径到数字索引