Доступ к PDF в Jar - PullRequest
       23

Доступ к PDF в Jar

1 голос
/ 08 июля 2011

Я создаю приложение Java с использованием Netbeans. В пункте меню «Помощь» мне необходимо открыть файл PDF. Когда я запускаю приложение через Netbeans, документ открывается, но при открытии через файл jar он не открывается. Есть ли что-нибудь, что можно сделать?

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

        }
    });

Два выхода следующие:

E:/new/build/classes/newpkg/Documentation.pdf
file:/E:/new/build/classes/newpkg/Documentation.pdf

Рассмотрим приведенный фрагмент кода. При печати «ссылка» мы видим, что он точно такой же, как и жестко закодированный «ссылка 3» При использовании жестко закодированной ссылки 3 файл PDF открывается из приложения jar. Но когда мы используем ссылку, хотя она точно такая же, как 'link3', PDF не открывается.

Ответы [ 2 ]

0 голосов
/ 10 июля 2011

Попробуйте это:

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);
            }
        }

    }
});
0 голосов
/ 08 июля 2011

Это, скорее всего, связано с неправильной загрузкой ресурса PDF.В IDE у вас есть файл PDF либо как часть структуры проекта, либо с прямым указанием относительного пути.Когда упакованное приложение работает, оно не видит ресурс.

РЕДАКТИРОВАТЬ: Ваш код выявляет проблему, как я описал.Следующий метод может использоваться для правильного определения пути к ресурсу.

public static URL getURL(final String pathAndFileName) {
    return Thread.currentThread().getContextClassLoader().getResource(pathAndFileName);
}

Просьба обратиться к этому вопросу, который может предоставить дополнительную информацию.

...