qweo Ответов: 1

Программа плагин не отвечает?


когда я запускаю этот код, java не отвечает с результатом java: -805306369 .

этот код пытается разархивировать файл rar с помощью junrar. что такое результат java: -805306369 ?

это ошибка из-за нехватки памяти?

как я могу ее решить?

спасибо.

Что я уже пробовал:

String filename = importFile.getAbsolutePath();
    File f = new File(filename);
    Archive a = null;
    try {
        a = new Archive(f);
    } catch (RarException | IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    if (a != null) {
        FileHeader fh = a.nextFileHeader();
        while (fh != null) {
        try {
                        if(fh.getFileNameString().endsWith(".jml")){
                                    Path tempJml=Files.createTempFile("jml",".jml");
                                    FileOutputStream outJml=new FileOutputStream(tempJml.toFile());                       
                                    InputStream in=a.getInputStream(fh);                       
                                     int lenj;
                                      while ((lenj = in.read(buffer))>0 ) {
                                      outJml.write(buffer, 0, lenj);
                                       }
                                    outJml.close();
                                     in.close();
                                  ZipFile zpjml=new ZipFile(tempJml.toFile());
                                   zpjml.stream().forEach((jmlEntry)->{ 
                                   System.out.println(jmlEntry.getName());
                                   if(jmlEntry.getName().endsWith(".xml")){
                                try {
                                    InputStream x = null;
                                    try {
                                        x = zpjml.getInputStream(jmlEntry);
                                    } catch (IOException ex) {
                                        Logger.getLogger(ConvertController.class.getName()).log(Level.SEVERE, null, ex);
                                    }
                                    List<Card> xml = convertXml(x);
                                    if(xml!=null){
                                         xmlPat = createNewXml(xml,jmlEntry.getName());
                                    }
                                    ZipEntry newZe=new ZipEntry(jmlEntry.getName().substring(0,jmlEntry.getName().lastIndexOf("."))+".xml");
                                    zos.putNextEntry(newZe);
                                    InputStream inXml=new FileInputStream(xmlPat);

                                    int len;
                                    while ((len = inXml.read(buffer))>0 ) {
                                        zos.write(buffer, 0, len);
                                    }
                                    zos.closeEntry();
                                    inXml.close();
                                    x.close();
                                    Path temp=Paths.get(xmlPat);
                                    Files.deleteIfExists(temp);
                                } catch (DocumentException ex) {
                                    Logger.getLogger(ConvertController.class.getName()).log(Level.SEVERE, null, ex);
                                } catch (IOException ex) {
                                    Logger.getLogger(ConvertController.class.getName()).log(Level.SEVERE, null, ex);
                                }
                             }else if(jmlEntry.getName().startsWith("images")){
                                 try (InputStream inImag = zpjml.getInputStream(jmlEntry)) {
                                     ZipEntry newZe=new ZipEntry(jmlEntry.getName());
                                zos.putNextEntry(newZe);
                                   int len;
                                   while ((len = inImag.read(buffer)) > 0) {
                                       zos.write(buffer, 0, len);
                                   }

                                   zos.closeEntry();
                                   inImag.close();
                               } catch (IOException ex) {          
                                    Logger.getLogger(ConvertController.class.getName()).log(Level.SEVERE, null, ex);
                                }          
                             }

                        });


                        }
                    else if(fh.getFileNameString().endsWith(".xml")){
                                    InputStream in=a.getInputStream(fh);
                                    List<Card> xml = convertXml(in);
                                    if(xml!=null){
                                     xmlPath = createNewXml(xml,fh.getFileNameString());
                                    }
                                    ZipEntry newZe=new ZipEntry(fh.getFileNameString().substring(0,fh.getFileNameString().lastIndexOf("."))+".xml");            
                                    zos.putNextEntry(newZe);
                                    InputStream inXml = new FileInputStream(xmlPath);
                                       int len;
                                       while ((len = inXml.read(buffer))>0 ) {
                                           zos.write(buffer, 0, len);
                                       }
                                       in.close();
                                       zos.closeEntry();
                                       inXml.close();
                                    }
                    else if(fh.getFileNameString().startsWith("images")){
                                     ZipEntry newZe=new ZipEntry(fh.getFileNameString());
                                     zos.putNextEntry(newZe);
                                       InputStream inFile=a.getInputStream(fh);
                                        int len;
                                          while ((len = inFile.read(buffer))>0 ) {
                                            zos.write(buffer, 0, len);
                                        }

                                        inFile.close();
                                        zos.closeEntry();

                                }else{
                        continue;
                    }
                            }catch(RarException | IOException e){
                                e.printStackTrace();
                            }
            fh = a.nextFileHeader();
        }

    }

             zos.close();

Patrice T

Дайте все подробности, полное сообщение об ошибке и положение.

1 Ответов

Рейтинг:
10

Patrice T

Всего те try-catch блоки не позволяют Java рассказать вам, в чем проблема. Они также мешают вам увидеть, в чем проблема.
Совет: снимите try-catch блоки и пусть Java расскажет вам, что происходит.
Поскольку проблема, вероятно, зависит от данных, помочь вам невозможно.
Используйте отладчик, чтобы увидеть, как работает ваш код.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.