我创建了一个桌面应用程序,我遇到了一个问题,我生成的runnable jar.一切都在
Eclipse环境中运行正常,但是当我生成jar时,它只会显示theswtcomponents(菜单,选项卡等).
其他库位置是一个空白区域(用于生成库的库).同样没有出现工具栏(包含图片的按钮),GoogleMap.htmldoes没有出现.
其他库位置是一个空白区域(用于生成库的库).同样没有出现工具栏(包含图片的按钮),GoogleMap.htmldoes没有出现.
如何正确生成一个包含这些外部源的可执行jar?
folderSearchIcon = new Image(display,this.getClass().getResourceAsStream("images/search_folder.png"));
GoogleMap.html加载代码:
File mapFile = new File("resources/GoogleMap.html"); if(!mapFile.exists()) { System.out.println("File doesn't exist! " + mapFile.getAbsolutePath()); return; }
生成可运行的jar:
我的应用程序结构在Eclipse中并生成jar结构:
生成清单:
Manifest-Version: 1.0 Rsrc-Class-Path: ./ swt.jar commons-imaging-1.0-SNAPSHOT.jar org.eclip se.nebula.widgets.gallery_0.5.3.201210262156.jar xmpcore.jar Metadata -extractor-2.6.3.jar Class-Path: . Rsrc-Main-Class: geotagger.AppInit Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
解决方法
对于工具栏图像,您需要添加斜杠,即代替
this.getClass().getResourceAsStream("images/search_folder.png")
你需要
this.getClass().getResourceAsStream("/images/search_folder.png")
这是因为,as explained in the JavaDocs,Class.getResourceAsStream解决了相关类的包的相对路径,所以如果这是一个com.example.Foo,那么getResourceAsStream(“images / search_folder.png”)将寻找com / example / images你的JAR里面有/search_folder.png预设斜杠将使它寻找images / search_folder.png而不是你的屏幕截图.
您将需要使用类似的GoogleMap.html技巧 – 您无法使用java.io.File从JAR内部加载项目,但您可以使用this.getClass().getResource(“/ GoogleMap.html”)以获取指向您的JAR内的HTML文件的java.net.URL.