0

JMenuItem をクリックして PDF を開く必要があります。netbeans からプログラムを実行すると、メニュー項目をクリックして pdf を開くことができます。しかし、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);
            }
        }
    });

これも試してみましたが、同じ結果が得られました.netbeansから実行するとmenuitemからpdfを開くことができますが、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);
                }
            }

        }
    });

この 2 番目のコードを netbeans から実行すると、すべての system.out.println() の出力は次のようになります。

run:

F:/new/build/classes/newpkg/Documentation.pdf F:\new\build\classes\newpkg\Documentation.pdf ビルド成功 (合計時間: 5 秒)

4

3 に答える 3

1

rundll32.exe現在Jar内にあるリソースを処理できません。によって返されたURLを調べますgetResource(String)

..しかしまだ動作していません..

問題はrundll32、少なくともPDFの場合、Fileインスタンスのみであったことです。PDFを消費する(たとえば表示する)ツールは、通常、コマンドライン引数を受け入れるようには設計されていません。を表すURLURLがを指していることが判明した場合はFile、プロセスを続行できます。しかし、PDFがJarに入ると、それはJarの単なるエントリになります。言い換えれば、それはではありませんFile

その理由が正しければ、デフォルトのソフトウェアでPDFを表示する1つの方法は次のとおりです。

  1. URL今行ったようにPDFを入手してください。
  2. URLジャーを指しているかどうかを確認します(「!」が含まれます)。もしそうなら..
    1. PDFをJarからFileディスク上の(一時的な)に抽出します。
  3. (おそらく一時的な)を表示しFileます。
于 2011-07-05T05:42:46.710 に答える
1

Java 6とDesktopAPIを使用できますか?

起動時にファイルをディスクにエクスポートまたはダウンロードできますか?

于 2011-07-05T14:06:11.990 に答える