не могу загрузить изображение с JFileDialog - PullRequest
0 голосов
/ 24 августа 2018

изначально использовал jfilechooser для загрузки файлов jpg в проект, но переключился на jFileDialog, потому что я хотел получить изображения в виде эскизов.но когда я запускаю проект, я получаю сообщение об ошибке:

javax.imageio.IIOException:Cant read input file!

это код ниже:

FileDialog fd = new FileDialog(this,"Choose a File",FileDialog.LOAD); 
    fd.setDirectory("C:\\");
    fd.setFile("*.jpg;*.jpeg");
    fd.setVisible(true);  
    filename = fd.getFile();
    if(filename==null){
    }else{
    try{
            File imgs =new File(filename);
            BufferedImage bufferedimage=ImageIO.read(imgs);
            BufferedImage thumbnail=Thumbnails.of(bufferedimage)
            .size(145, 141)
            .asBufferedImage();
            ByteArrayOutputStream os = new  ByteArrayOutputStream();
            ImageIO.write(thumbnail,"jpeg", os);
            InputStream is=new ByteArrayInputStream(os.toByteArray());
            ByteArrayOutputStream bos = new  ByteArrayOutputStream();
            byte[] buf =new byte[1024];
            try{
                for(int readNum; (readNum=is.read(buf))!=-1;){
                    bos.write(buf,0,readNum);
                    System.out.println("Read" +readNum+ "bytes,");
                }
            }catch(IOException ex){
                Logger.getLogger(null);
            }
            person_image=bos.toByteArray();
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
        }finally{
            try{
                rs.close();
                pst.close();
            }
            catch(Exception e){
            }
        }

Я думаю, что проблема исходит из этого раздела:

File imgs =new File(filename);
BufferedImage bufferedimage=ImageIO.read(imgs);

, похоже, файл не получен.пожалуйста, что я делаю не так?

1 Ответ

0 голосов
/ 24 августа 2018

Я только что немного его протестировал, а метод FileDialog.getFile просто возвращает имя файла, а не полный путь!Чтобы получить каталог, вы должны вызвать FileDialog.getDirectory

Самый простой способ исправить это - просто объединить каталог и файл.

filename = fd.getDirectory() + File.seperator + fd.getFile();

Я не совсем уверен, что вынужен File.seperator, потому что fd.getDirectory может уже иметь разделитель файлов в конце, и вы получите несколько разделителей.

Чтобы решить это, используйте:

filename = new File(new File(fd.getDirectory()), fd.getFile()).getPath();

Или просто сохранитефайл непосредственно без .getPath в конце и не храните строку в пути.

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