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

このgetResource()メソッドは、最初にリソースの親クラス ローダーを検索します。親が null の場合、仮想マシンに組み込まれているクラス ローダーのパスが検索されます。失敗すると、このメソッドはfindResource(String)リソースを見つけるために呼び出されます。したがって、これらすべての後、 null を返す場合、問題はimagepathergoにありIMG_URLます。また、リソースが見つからない場合、または呼び出し元がリソースを取得するための適切な権限を持っていない場合は、null が返されることに注意してください。

于 2011-11-29T02:54:08.433 に答える
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 に答える