0

此代码在 Windows XP 上正确运行。但是在我的 Windows 7 机器上我看不到图标,因为 getResource 返回 null。我尝试了绝对路径,但它也不起作用。我不知道该怎么做,我在管理员模式下运行 Eclipse:

private static JButton createToolButton(String imgName, String altText, String toolTipText) {

    String imagePath = IMG_URL + "/" + imgName;

    URL imageUrl = SwingUtility.class.getResource(imagePath);
    JButton button = new JButton();
    button.setToolTipText(toolTipText);

    if(imageUrl != null) //Image trouvé
        button.setIcon(new ImageIcon(imageUrl, altText));
    else
        button.setText(altText);

    return button;
}
4

2 回答 2

1

这是我的解决方案,并不理想,但它有效。经过多次测试,我只是觉得使用点符号进入当前目录并不能完全按照使用基本 java 实用程序的预期工作。最终只是获得了项目路径并将其拆分到我想要的位置,尚未在其他机器上进行测试。

private static JButton createToolButton(String imgName, String altText, String toolTipText) 
{
    String imagePath = IMG_FOLDER_NAME + "\\" + imgName;
    BufferedImage img = null;
    JButton button = new JButton();

    try 
    {
        img = ImageIO.read(new File(projectPath() + imagePath));
    } 
    catch (IOException e)
    {
        e.printStackTrace();
    }


    button.setToolTipText(toolTipText);

    if(img != null)
       button.setIcon(new ImageIcon(img, altText));
    else
       button.setText(altText);

    return button;
}

private static String projectPath()
{
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    URL url = classLoader.getResource("");
    String pathArr[] = url.getPath().split(PATH_SEPARATOR);
    return pathArr[0];
}
于 2011-11-30T00:57:28.137 回答
1

getResource()方法将首先在父类加载器中搜索资源;如果 parent 为 null,则搜索虚拟机内置的类加载器的路径。如果失败,此方法将调用findResource(String)以查找资源。因此,在所有这些之后,如果它返回 null,则问题出在imagepathergoIMG_URL上。另请注意,如果找不到资源或调用者没有足够的权限来获取资源,它会返回 null。

于 2011-11-29T02:54:08.433 回答