Java не может открыть PDF с помощью среды выполнения

Я должен открыть PDF при нажатии на JMenuItem. Я могу открыть PDF-файл по щелчку на пункте меню, если я запускаю свою программу из netbeans. Но когда я бегу из файла JAR, он не открывается. Я убираю и строю свой проект. Но без изменений. Работает при запуске из netbeans, но не из файла jar. Нужно ли добавить библиотеку?

Мои коды следующие

m_aboutItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Runtime rt = Runtime.getRuntime();
           //System.out.println(Menubar1.getDefaultLocale());
                URL link2=Menubar1.class.getResource("/newpkg/Documentation.pdf");
                String link=link2.toString();
                link=link.substring(6);
                System.out.println(link);
                System.out.println(link2);
                String link3="F:/new/build/classes/newpkg/Documentation.pdf";
                try {
                Process proc = rt.exec("rundll32.exe url.dll,FileProtocolHandler " + link2);
            } catch (IOException ex) {
                Logger.getLogger(Menubar1.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });

Пробовал это тоже, но получаю то же самое... я могу открыть pdf из меню, когда я запускаю из netbeans, но не из jar-приложения.

m_aboutItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (Desktop.isDesktopSupported()) {
            Desktop desktop = Desktop.getDesktop();
            URL link2=Menubar1.class.getResource("/newpkg/Documentation.pdf");
                String link=link2.toString();
                link=link.substring(6);
                System.out.println(link); 
            File file=new File(link);
            System.out.println(file);
                try {
                    desktop.open(file);
                } catch (IOException ex) {
                    Logger.getLogger(Menubar1.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }
    });

Вывод для всех system.out.println() следующий при запуске из netbeans для этого второго кода

run:

F:/new/build/classes/newpkg/Documentation.pdf F:\new\build\classes\newpkg\Documentation.pdf BUILD SUCCESSFUL (общее время: 5 секунд)

3 ответа

Решение

rundll32.exe не может справиться с ресурсом, который сейчас находится внутри Jar. Проверьте URL, возвращенный getResource(String),

..но все еще не работает..

Проблема в том, что rundll32 был, по крайней мере, для PDF, только для File экземпляров. Инструменты, которые используют (например, отображают) PDF-файлы, как правило, не предназначены для принятия аргументов командной строки. представляя URL, Если URL должно оказаться, чтобы указать на FileПроцесс может продолжаться. Но если PDF-файл находится в банке, это просто запись в банке. Или, говоря по-другому, это не File ,

Если эти рассуждения верны, один из способов отображения PDF в программном обеспечении по умолчанию:

  1. Получить URL в PDF, как сделано сейчас.
  2. Проверьте, если URL указывает на банку (она будет содержать '!'). Если это произойдет..
    1. Извлеките PDF из банки в (временный) File на диске.
  3. Отображение (возможно, временное) File,

Можете ли вы использовать Java 6 и Desktop API?

а при запуске вы можете экспортировать или скачать файл на диск?

 try                                      //try statement
     {
         Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + "c:\\chart.pdf");   //open the file chart.pdf

     } catch (Exception e)                    //catch any exceptions here
       {
           System.out.println("Error" + e );  //print the error
       }
Другие вопросы по тегам