由于java.lang.ArrayIndexOutOfBoundsException,无法打开图像

时间:2015-07-06 14:44:46

标签: java

已经制作了应该在我的桌面上打开图像的程序,但是当我运行它时它会给我错误java.lang.ArrayIndexOutOfBoundsException。我做错了什么?

import java.awt.BorderLayout;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;


public class Image {
public static void main(String[] args) throws Exception
{
    new Image(args[0]);
}

public Image(final String filename) throws Exception
{
    SwingUtilities.invokeLater(new Runnable()
    {
        public void run()
        {
            JFrame editorFrame = new JFrame("C:/Users/Username/Desktop/index.jpg");
            editorFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

            BufferedImage image = null;
            try
            {
                image = ImageIO.read(new File(filename));
            }
            catch (Exception e)
            {
                e.printStackTrace();
                System.exit(1);
            }
            ImageIcon imageIcon = new ImageIcon(image);
            JLabel jLabel = new JLabel();
            jLabel.setIcon(imageIcon);
            editorFrame.getContentPane().add(jLabel, BorderLayout.CENTER);

            editorFrame.pack();
            editorFrame.setLocationRelativeTo(null);
            editorFrame.setVisible(true);
        }
    });
}

我怎么得到这个错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at Image.main(Image.java:15)

2 个答案:

答案 0 :(得分:1)

您必须将命令行参数传递给main()方法。那个论点我们正在通过Image()构造函数。

new Image(args[0]);

请查看下面的命令行概念。

什么是命令行参数?

  

Java应用程序可以从命令接受任意数量的参数   线。这些参数称为命令行参数。这允许用户在何时指定配置信息   该应用程序已启动。

如何传递命令行参数?

  

用户在调用应用程序时输入命令行参数   并在要运行的类的名称后指定它们。

例如, 假设一个名为Sort的Java应用程序对文件中的行进行排序。要对名为friends.txt的文件中的数据进行排序,用户将输入:

java Sort friends.txt

此处:排序 - 类名
       friends.txt ---命令行参数。

  

启动应用程序时,运行时系统会通过   通过数组的应用程序主要方法的命令行参数   字符串。在前面的示例中,传递了命令行参数   到包含单个String的数组中的Sort应用程序:   " friends.txt"

<强>更新

您可以使用Space作为分隔符传递多个命令行参数。

喜欢

java Sort stack.txt overflow.txt 

如何在Eclipse中传递命令行参数?

转到package explorer或Navigator视图上的程序

选择该程序---&gt;然后右键单击程序选择运行方式 ---&gt; 运行配置 ---&gt;在顶部选择参数第二个选项---&gt;就程序参数

提供论据

见下面的屏幕截图:

enter image description here

答案 1 :(得分:0)

看起来你忘了通过命令行args。

new Image(args[0]);