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

请问这是怎么回事啊?

阿神
阿神

闭关修行中......

membalas semua(4)
阿神

Nampaknya ada masalah dengan laluan saya tidak membaca gambar itu.

Ada gambar arnab di sini? Dalam kod semasa, imej harus berada dalam direktori yang sama dengan program yang dihasilkan.

PHPzhong

Laluan relatif idea adalah relatif kepada direktori akar projek, bukan relatif kepada direktori akar output.

阿神

Fail tidak dibaca. Fail imej anda tidak berada dalam direktori berpakej

Peter_Zhu

@tanda bintang oriental @kepercayaan rekaan ,

Gambar pertama ialah situasi folder dalam Eclipse, dan gambar kedua ialah situasi folder dalam IDEA.
Tetapi dalam IDEA, tukarkannya kepada imej BufferedImage = ImageIO.read(this.getClass().getResource((path))); dan saya rasa ia adalah masalah classpath atau masalah laluan, tetapi Spesifiknya tidak jelas.

------Kemas kini------
Masalah telah diselesaikan, Sebabnya di bawah IDEA, laluan relatif lalai kepada Laluan projek atau Laluan Modul, jadi jika anda sama ada meletakkan folder imej dalam direktori tahap yang sama dengan folder .idea, atau meletakkannya dalam folder yang lebih dalam, tetapi anda perlu meletakkannya dalam folder imej semasa membuat fail atau mendapatkan laluan. Direktori peringkat tinggi di mana ia terletak dicerminkan, supaya tiada situasi di mana fail tidak boleh dibaca.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan