我最近在做一个C/S工作模式的小工程交作业,可是我在将程序打包为JAR的时候遇到了这样一个问题----无法获得在JAR包同级目录下的一个文件资源,使用URL类是我的最后一个办法,如果高手知道别的方法,也请您不吝赐教,谢谢,老师催的真的很急.目录结构的大致描述:
程序文件夹(ChatClient)与资源文件夹(doc)位于同一个目录;
main.java在程序文件夹中,template.htm在资源文件夹中;
main.java中实例化了一个URL类,想通过JEdtorPane.setPage(URL);方法来读取template.htm.问题描述:
不可以使用 URL HtmlUrl=new URL("file:///c:/NetChatHall/doc/template.htm"); 这种绝对定位的方式(因为这样封装成JAR包以后程序就不能在任何一个目录下运行了);
也不能使用 this.getClass().getResource("../doc/template.htm") 这种相对定位方式获得资源(因为这样封装成JAR包以后就读不到外部资源了);请高手现身说法,先拜谢一下,我真的快急疯了~
程序文件夹(ChatClient)与资源文件夹(doc)位于同一个目录;
main.java在程序文件夹中,template.htm在资源文件夹中;
main.java中实例化了一个URL类,想通过JEdtorPane.setPage(URL);方法来读取template.htm.问题描述:
不可以使用 URL HtmlUrl=new URL("file:///c:/NetChatHall/doc/template.htm"); 这种绝对定位的方式(因为这样封装成JAR包以后程序就不能在任何一个目录下运行了);
也不能使用 this.getClass().getResource("../doc/template.htm") 这种相对定位方式获得资源(因为这样封装成JAR包以后就读不到外部资源了);请高手现身说法,先拜谢一下,我真的快急疯了~
也就是在你的run.bat中为Main的public static void main(String args[])设置一个参数,然后用args[0]得到这个路径,使用System.setProperty("apppath",args[0])设置一个环境变量。然后你要取的时候就可以用System.getProperty("apppath")来得到你的应用程序路径,那么每个包就可以使用绝对路径来取了。比如apppath+"/lib/ss/cc/template.htm"就行了。
不过还是谢谢您的回答,结贴一定送分.
你是不是想说apppath这个路径你也想用java直接拿到呢??这个比较麻烦,一般都是根据你的项目路径来设置这个appath的,直接获得比较麻烦,我还没见过哪个程序能直接拿到。用ant到是可以,不过ant也是因为你的build.xml和ant_home结合才取到的。
比如图片把
a.jpg
/subPackage
a.jpg你用Toolkit.getDefaultToolkit().getImage("a.jpg");
调用a.jpg
Toolkit.getDefaultToolkit().getImage("subPackage\\a.jpg");
调用subPackage\\a.jpgURL的话也一样的以后弄出程序打jar
a.jar
a.jpg用Toolkit.getDefaultToolkit().getImage("a.jpg");
subPackage\\a.jpg用Toolkit.getDefaultToolkit().getImage("subPackage\\a.jpg");