3

我正在尝试将存储在 jar 文件中的 html 页面加载到帮助 JEditorPane 中。到目前为止,当我在 Eclipse 中运行它时它可以工作,但是当我制作一个可运行的 jar 时它不会工作,除非我将地图 res/pages/... 放在与 jar 文件相同的地图中

class HelpButtonHandler implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent arg0) {
             infodex = new JEditorPane();
                helpDialog = new JDialog();


            URL url1 = null;
            try {
                url1 = (new java.io.File("res/pages/help.html")).toURI().toURL();
            } catch (MalformedURLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }


            try {
                infodex.setPage(url1);
            } catch (IOException e) {
                e.printStackTrace();
            }


            helpDialog.getContentPane().add(new JScrollPane(infodex));
            helpDialog.setBounds(400,200,700,600);
            helpDialog.show();
            infodex.setEditable(false);
            Hyperactive hyper = new Hyperactive();
            infodex.addHyperlinkListener(hyper);


        }


    }
4

3 回答 3

4

A file packaged inside a .jar is not a file on the file system. You cannot access it with the File class.

A file inside a .jar is called an application resource. You access it using the Class.getResource method:

url1 = HelpButtonHandler.class.getResource("/res/pages/help.html");

It is up to you to make sure the files are properly packaged in your .jar. If url1 is null, check the structure of your .jar file.

于 2013-10-25T10:20:52.507 回答
1

当您将资源放入 jar 中时,您无法使用File. 您需要通过(更准确地说: a)类加载器将它们作为资源访问。例如:

HelpButtonHandler.class.getResource("/res/pages/help.html");

确保您将资源放在正确的位置:如果您遗漏了第一个斜杠 (' /'),类加载器将尝试相对于您的类来定位它(这通常不是您想要的)。

于 2013-10-25T10:23:20.977 回答
0

使用 gerResource() 方法...

url = getClass().getClassLoader().getResource("res/pages/help.html");

检查这个链接

http://oakgreen.blogspot.com/2011/12/java-getclassgetclassloadergetresourcem.html

于 2013-10-25T10:18:39.310 回答