`
bsr1983
  • 浏览: 1116411 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用swt中的一个获取图片的类SwingResourceManager 来解决将程序打为jar后图片找不着的问题

阅读更多
利用swt中的一个获取图片的类SwingResourceManager 来解决将程序打为jar后图片找不着的问题

该类的具体代码如下:

import java.awt.Image;
import java.awt.Toolkit;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import javax.swing.ImageIcon;

public class SwingResourceManager {

private static HashMap <String, Image> m_ClassImageMap = new HashMap <String, Image>();

private static Image getImage(InputStream is) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte buf[] = new byte[1024 * 4];
while (true) {
int n = is.read(buf);
if (n == -1)
break;
baos.write(buf, 0, n);
}
baos.close();
return Toolkit.getDefaultToolkit().createImage(baos.toByteArray());
} catch (Throwable e) {
return null;
}
}

public static Image getImage(Class clazz, String path) {
String key = clazz.getName() + ' ¦' + path;
Image image = m_ClassImageMap.get(key);
if (image == null) {
if ((path.length() > 0) && (path.charAt(0) == '/')) {
String newPath = path.substring(1, path.length());
image = getImage(new BufferedInputStream(clazz.getClassLoader().getResourceAsStream(newPath)));
} else {
image = getImage(clazz.getResourceAsStream(path));
}
m_ClassImageMap.put(key, image);
}
return image;
}


public static Image getImage(String path) {
return getImage("default", path); //$NON-NLS-1$
}


public static Image getImage(String section, String path) {
String key = section + ' ¦' + SwingResourceManager.class.getName() + ' ¦' + path;
Image image = m_ClassImageMap.get(key);
if (image == null) {
try {
FileInputStream fis = new FileInputStream(path);
image = getImage(fis);
m_ClassImageMap.put(key, image);
fis.close();
} catch (IOException e) {
return null;
}
}
return image;
}

public static void clearImages(String section) {
for (Iterator I = m_ClassImageMap.keySet().iterator(); I.hasNext();) {
String key = (String) I.next();
if (!key.startsWith(section + ' ¦'))
continue;
Image image = m_ClassImageMap.get(key);
image.flush();
I.remove();
}
}


public static ImageIcon getIcon(Class clazz, String path) {
return getIcon(getImage(clazz, path));
}


public static ImageIcon getIcon(String path) {
return getIcon("default", path); //$NON-NLS-1$
}

public static ImageIcon getIcon(String section, String path) {
return getIcon(getImage(section, path));
}
public static ImageIcon getIcon(Image image) {
if (image == null)
return null;
return new ImageIcon(image);
}
}

将该类放在你的项目中,使用方法 例子如下
lable对象.setIcon(SwingResourceManager.getIcon(label所在类的类名.class,
"图片所在相对与类路径"));
如你的图片icon.jpg在与你程序根目录namespace在同一根目录下的image文件夹中,则路径应写为/image/icon.jpg
如果打包,推荐使用eclipse插件:fatjar
分享到:
评论

相关推荐

    解决java打包之后无法加载静态资源的问题SWTResourceManager.java源码

    利用swt中的一个获取图片的类SwingResourceManager 来解决将程序打为使用java打包之后,生成的jar包中图片找不着的。这是因为通过class.getResource()方法在IDEA中运行的路径和生成jar包获取的的路径是不同的。打成...

    DJNativeSwing-SWT.jar、DJNativeSwing.jar、swt-win-x64.jar

    DJNativeSwing-SWT.jar是这个库的核心,它实现了将SWT组件集成到Swing应用中的桥梁,使得开发者可以在一个应用中同时利用Swing和SWT的优点。 DJNativeSwing.jar是DJProject的主要库,它包含了一系列用于构建混合...

    swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位

    SWT(Standard Widget Toolkit)是Java编程环境中一个用于创建图形用户界面(GUI)的开源库,它是Eclipse项目的一部分。标题“swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位”表明这个压缩包包含了适用于...

    swt.jar swt.jar swt.jar

    swt.jar swt.jar swt.jar swt.jar swt.jar

    32位swt的jar包

    如果你的开发环境是32位的,或者你需要为32位系统构建应用程序,这个jar包将非常有用。 描述中提到,如果Eclipse环境中没有SWT的jar包,或者现有的jar包是绝对路径,那么你可能无法正常开发使用SWT的图形界面。这是...

    SWT的一些jar

    2. swt-debug.jar:这是一个用于SWT的调试版本的jar文件,通常包含了额外的代码和信息,帮助开发者在调试过程中定位问题。它可能包含了更详细的错误报告和日志记录,以便于在开发阶段找出潜在的问题。 3. org....

    swt-arm64.jar.zip

    在本案例中,我们关注的是SWT的arm64版本——`swt-arm64.jar`,这是一个专为国产化服务器架构设计的库,适用于飞腾服务器和麒麟服务器等基于ARM64架构的系统。 在传统的Java GUI开发中,开发者通常会使用AWT或Swing...

    SWT源码 swt.jar

    通过添加这个jar到项目的类路径,开发者就可以在他们的程序中使用SWT组件,如按钮、文本框、树视图等。 描述中提到的"src.zip"文件包含的是SWT的源代码,这对于开发者进行调试、学习和定制SWT行为至关重要。源代码...

    org.eclipse.wb.swt.SWTResourcemanager类找不到使用不了

    标题 "org.eclipse.wb.swt.SWTResourceManager类找不到使用不了" 描述了开发人员在尝试将一个基于Eclipse RCP(Rich Client Platform)的应用程序移植到IntelliJ IDEA时遇到的问题。SWT(Standard Widget Toolkit)是...

    swt64位和32位jar包4.3版本可用

    描述中的问题提示我们,虽然提供了64位和32位的SWT jar包,但64位的jar包并不能解决上述的兼容性问题。这可能意味着64位的SWT库可能没有包含解决这个问题的必要组件,或者用户需要正确配置其开发环境以使用正确的库...

    swt/jface.jar

    标题中的"swt/jface.jar"是一个关键组件,它在Java开发环境中用于构建用户界面。SWT(Standard Widget Toolkit)是IBM开发的一个开源GUI库,它提供了与原生操作系统更紧密集成的图形用户界面控件。JFace是建立在SWT...

    swt.jar包与源文件

    `swt-debug.jar`是SWT的调试版本,包含额外的调试信息,有助于开发者在调试过程中获取更详细的错误信息,以优化代码和解决问题。 `.project`文件同样属于Eclipse项目配置的一部分,它定义了项目的属性,如构建设置...

    swt源码和jar包dj-native-swing-swt.jar

    需要在32为浏览器中使用",这意味着这个库是针对32位系统的,如果你的应用程序或开发环境是32位的,你需要使用这个版本的SWT库才能正常运行。同时,"src中为源码,可以直接在项目中引用"意味着除了预编译的jar包之外...

    swt程序发布,jar转exe

    标题中的“swt程序发布,jar转exe”指的是将基于Java SWT(Standard Widget Toolkit)编写的程序转换成可执行的Windows EXE文件。SWT是Java平台上的一个GUI库,它提供了与本机操作系统更紧密集成的用户界面,使得...

    swt相关jar

    3. `swt-debug.jar`:这是一个包含SWT库的调试版本的JAR文件,它允许开发者在开发过程中获取更多的调试信息,以帮助定位和解决问题。 4. `swt.jar`:这是主要的SWT库文件,包含了实现SWT控件和功能的Java类。开发者...

    swt需要的jar包

    "swt_jar_2"这个压缩包子文件的文件名称表明它可能是SWT的一个版本,可能是更新或修正后的版本,包含了多个JAR文件,分别对应不同的操作系统平台(如Windows、Linux、Mac OS等),因为SWT库是跨平台的,需要针对不同...

    SWT --JAR 包

    将下载的"swt_jar"添加到Java项目的类路径中,可以在代码中导入SWT相关的类和方法,开始创建SWT GUI。需要注意的是,由于SWT依赖于特定的操作系统和架构,所以需要选择与目标运行环境匹配的JAR文件。 7. 示例代码...

    swt.jar32&64

    描述中提到的"成功解决32位64位java开发难题",意味着SWT.jar文件的提供解决了开发者在跨不同位宽系统时遇到的兼容性问题。在Java开发中,如果你的程序需要在不同平台上运行,包括32位和64位系统,你需要为每个平台...

    org.eclipse.swt相关所有jar包,

    在JAVA调用IE内核制作浏览器的过程中,SWT使用了一个名为`Browser`的类,这个类允许开发者创建一个内嵌的Web浏览器控件。它支持HTML、CSS、JavaScript等Web标准,并且可以执行复杂的Web应用程序。这种功能对于那些...

    SWT需要的jar包,window32和linux64

    总的来说,这个压缩包为开发者提供了在Windows 32位和Linux 64位系统上使用SWT所需的jar文件,使得开发者可以创建具有原生外观和性能的Java GUI应用程序。无论你是正在构建一个新的桌面应用,还是希望提升现有应用的...

Global site tag (gtag.js) - Google Analytics