Runnable Jar找不到资源和其他库

uni*_*ead 12 java eclipse swt executable-jar

我创建了一个桌面应用程序,我遇到了生成的runnable jar问题.在Eclipse环境中一切正常,但是当我生成jar时,它只显示swt组件(菜单,选项卡等).其他库位置是一个空白区域(用于生成库的库).没有出现相同的内容set ToolBar(包含带图像的按钮),GoogleMap.html不会出现.

如何正确生成包含这些外部源的可执行jar?

ToolBar图片加载代码:

folderSearchIcon = new Image(display, this.getClass().getResourceAsStream("images/search_folder.png"));
Run Code Online (Sandbox Code Playgroud)

GoogleMap.html加载代码:

File mapFile = new File("resources/GoogleMap.html");        
if(!mapFile.exists()) {
    System.out.println("File doesn't exist! " + mapFile.getAbsolutePath()); 
    return;
}
Run Code Online (Sandbox Code Playgroud)

生成可运行的jar:

在此输入图像描述

我在Eclipse中的app结构和生成的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
Run Code Online (Sandbox Code Playgroud)

Ian*_*rts 9

对于工具栏图像,您需要添加斜杠,即代替

this.getClass().getResourceAsStream("images/search_folder.png")
Run Code Online (Sandbox Code Playgroud)

你需要

this.getClass().getResourceAsStream("/images/search_folder.png")
Run Code Online (Sandbox Code Playgroud)

这是因为,正如JavaDocs中所解释的那样,Class.getResourceAsStream解析了相关类的包的相对路径,因此如果this是,com.example.Foo则会在JAR中getResourceAsStream("images/search_folder.png")查找com/example/images/search_folder.png.预先设置斜线会使其显示,images/search_folder.png而这正是您的屏幕截图所示需要的.

您将需要使用类似的技巧GoogleMap.html- 您无法使用JAR内部加载项目java.io.File,但您可以使用它this.getClass().getResource("/GoogleMap.html")java.net.URL指向JAR中的HTML文件.