Java Swing JButton getResource运行不正常

时间:2011-11-29 02:01:58

标签: java swing jbutton getresource

此代码在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;
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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];
}