为什么同一段代码在IDEA和Eclipse之中运行的结果不一样?
阿神
阿神 2017-04-24 09:13:34
0
4
1072
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

请问这是怎么回事啊?

阿神
阿神

闭关修行中......

répondre à tous(4)
阿神

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é.

PHPzhong

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

阿神

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.

Peter_Zhu

@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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal