Проект Maven: ошибка FileNotFoundException при создании файла Jar - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь создать файл jar с проектом Maven, но когда я запускаю файл jar, у меня появляется IOException. Есть ли что-то, что можно добавить в файл pom.xml? Я использую проект Maven, потому что мне нужно добавить зависимость jfreechart.

Это IOException:

java.io.FileNotFoundException: src\main\resources\images\NoAHMhkB6eE.png (Le che
min d?accès spécifié est introuvable)
        at java.io.RandomAccessFile.open0(Native Method)
        at java.io.RandomAccessFile.open(Unknown Source)
        at java.io.RandomAccessFile.<init>(Unknown Source)
        at javax.imageio.stream.FileImageOutputStream.<init>(Unknown Source)
        at com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstan
ce(Unknown Source)
        at javax.imageio.ImageIO.createImageOutputStream(Unknown Source)
        at javax.imageio.ImageIO.write(Unknown Source)
        at l2j1.Image.createGrayscaleImage(Image.java:69)

образец кода ошибки:

public static Image createGrayscaleImage(String imgPath) throws IOException, NotAPictureException {
        String grayscaleImagePath = null ;
        BufferedImage image = null ; 
        File o = new File(imgPath);


            if (ImageIO.read(o) == null) {
                throw new NotAPictureException(o.getAbsolutePath());
            }else {
                image = (ImageIO.read(o));
            }


        BufferedImage grayscaleImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);

        for (int i = 0; i < image.getWidth() ; i++) {
            for(int j = 0; j < image.getHeight(); j++) {

                Color c = new Color(image.getRGB(i, j));

                int r = c.getRed();
                int g = c.getGreen();
                int b = c.getBlue();

                int gray = (r + g + b)/3; 

                Color gColor = new Color(gray, gray, gray); 
                grayscaleImage.setRGB(i, j, gColor.getRGB()); 

            }           
        }

        grayscaleImagePath ="src"+File.separator+"main"+File.separator+ "resources" + File.separator + "images" + File.separator + getImgName(imgPath);


            ImageIO.write(grayscaleImage, "png", new File(grayscaleImagePath));

            return new Image(grayscaleImagePath, imgPath);






    }

Я пытаюсь создать InputStream, например:

InputStream in = Image.class.getClassLoader().getResourceAsStream("src"+File.separator+"main"+File.separator+ "resources" + File.separator + "images" + File.separator + getImgName(imgPath));


    grayscaleImagePath ="src"+File.separator+"main"+File.separator+ "resources" + File.separator + "images" + File.separator + getImgName(imgPath);


    byte[] buffer = new byte[in.available()];
    in.read(buffer);
    File targetFile = new File("src/main/resources"+File.separator + getImgName(imgPath));
    OutputStream outStream = new FileOutputStream(targetFile);
    outStream.write(buffer);
    outStream.close();
        ImageIO.write(grayscaleImage, "png", targetFile);

        return new Image(grayscaleImagePath, imgPath);

но у меня есть NullPointerException для буферного массива.

Спасибо тебе

1 Ответ

0 голосов
/ 24 апреля 2019

В соответствии с кодом, который вы разместили, вы пытаетесь сохранить файл изображения в этой папке ...

src\main\resources\images\

Это относительный путь.Относительно значения свойства java System свойство user.dir .Кажется, что значение этого свойства отличается, когда вы запускаете свой код в Eclipse , чем когда вы запускаете свой JAR.

Либо используйте абсолютный путь, либо убедитесь, что пользователь.dir указывает на то же местоположение, когда вы запускаете из Eclipse и из вашего JAR.

Конечно, если фактическое местоположение сохраненного файла не важно, вы также можетеиспользуйте значение System свойства "java.io.tmpdir" или "user.home", которые не меняются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...