我把图片放在了源文件的目录下,可是显示不出来,应放哪儿呢?我把源文件放在了一个包里

解决方案 »

  1.   

    可利用swt中的一个获取图片的类SwingResourceManager 来解决, 
    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
      

  2.   

    label所在类的类名.class?我这样写了,好像还不行耶。
      

  3.   

    你可以在项目文件夹下建个images文件夹,里面可以放图片,不过你加载的时候要这样写:./images/2.jpg
      

  4.   

    方法如下:
    Icon icon = new ImageIcon("./images/2.jpg");
    JLabel label = new JLabel(icon);// 将图片添加到JLabel标签上
      

  5.   

    放在包中可以的啊
    比如你的图片放在src中的com/swoky/icons文件夹下面,
    把IconFactory也放在这个目录下
    package com.swoky.icons;import javax.swing.ImageIcon;public class IconFactory { private final static String PACKAGE = "com/swoky/icons/";        //传入图片名称:xxx.gif
    public static ImageIcon getImageIcon(String name) {
    try {
        return new ImageIcon(ClassLoader.getSystemResource(PACKAGE.concat(name)));
    } catch (Exception e) {
    }
    }
    }