Maison  >  Questions et réponses  >  le corps du texte

为什么同一段代码在IDEA和Eclipse之中运行的结果不一样?

public class ToGray {

    /*二值化*/
    public void binaryImage() throws IOException {
        File file = new File("image/rabbit.jpeg");
        BufferedImage image = ImageIO.read(file);

        int width = image.getWidth();
        int height = image.getHeight();

        BufferedImage grayImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY);// 重点,技巧在这个参数BufferedImage.TYPE_BYTE_BINARY
        for (int i = 0; i < width; i++) {
            for (int j = 0; j < height; j++) {
                int rgb = image.getRGB(i, j);
                grayImage.setRGB(i, j, rgb);
            }
        }

        File newFile = new File("image/binary_rabbit");
        ImageIO.write(grayImage, "jpg", newFile);
    }

    /*灰度图片*/
    public void grayImage() throws IOException {
        File file = new File("image/rabbit.jpeg");
        BufferedImage image = ImageIO.read(file);

        int width = image.getWidth();
        int height = image.getHeight();

        BufferedImage grayImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);// 重点,技巧在这个参数BufferedImage.TYPE_BYTE_GRAY
        for (int i = 0; i < width; i++) {
            for (int j = 0; j < height; j++) {
                int rgb = image.getRGB(i, j);
                grayImage.setRGB(i, j, rgb);
            }
        }

        File newFile = new File("image/ggray_rabbit.jpg");
        ImageIO.write(grayImage, "jpg", newFile);
    }

    public static void main(String[] args) throws IOException {
        ToGray demo = new ToGray();
        demo.binaryImage();
        demo.grayImage();
        System.out.println("hello image!");
    }

}

在Eclipse之下可以正常通过,但是在IDEA下面会出现无法读取的错误,具体代码如下:

Exception in thread "main" javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(ImageIO.java:1301)
    at basicoperation.ToGray.grayImage(ToGray.java:70)
    at basicoperation.ToGray.main(ToGray.java:93)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Process finished with exit code 1

请问这是怎么回事啊?

阿神阿神2734 Il y a quelques jours1022

répondre à tous(4)je répondrai

  • 阿神

    阿神2017-04-24 09:15:34

    Il semble que ce soit un problème avec le chemin. Je n'ai pas lu la photo.

    Y a-t-il une photo d'un lapin ici ? Dans le code actuel, l'image doit être dans le même répertoire que le programme généré.

    répondre
    0
  • PHPz

    PHPz2017-04-24 09:15:34

    Le chemin relatif de l'idée est relatif au répertoire racine du projet, et non au répertoire racine de sortie.

    répondre
    0
  • 阿神

    阿神2017-04-24 09:15:34

    Le fichier n'a pas été lu. Votre fichier image n'est pas dans le répertoire emballé. L'idée doit être dans le répertoire out ou build.

    répondre
    0
  • 天蓬老师

    天蓬老师2017-04-24 09:15:34

    @marque étoile orientale @croyance fabriquée ,

    La première image est la situation du dossier dans Eclipse, et la deuxième image est la situation du dossier dans IDEA.
    Mais dans IDEA, remplacez-le par BufferedImage image = ImageIO.read(this.getClass().getResource((path))); et je pense que c'est un problème de chemin de classe ou de chemin, mais. Les détails ne sont pas clairs.

    ------Mise à jour------
    Le problème a été résolu, La raison est que sous IDEA, le chemin relatif par défaut est le Chemin du projet ou chemin du module, donc si vous placez le dossier images dans le même répertoire de niveau que le dossier .idea, ou si vous le placez dans un dossier plus profond, mais que vous devez le placer dans le dossier images lors de la création du fichier ou de l'obtention du chemin. Le répertoire de haut niveau où il se trouve est reflété, de sorte qu'il n'y aura aucune situation où le fichier ne pourra pas être lu.

    répondre
    0
  • Annulerrépondre