Java Swing JButton getResource не работает хорошо - PullRequest
0 голосов
/ 29 ноября 2011

Этот код работает правильно на Windows XP. Но дома на моем компьютере с Windows 7 я не вижу значки, потому что getResource возвращает ноль. Я пробовал абсолютный путь, и он тоже не работает. Я не знаю, что делать, я запускаю 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 ]

1 голос
/ 30 ноября 2011

Вот мое решение, не идеальное, но оно работает. После многих тестов я просто чувствую, что использование точечной нотации для перехода в текущий каталог не работает точно так, как ожидалось при использовании базовых утилит 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];
}
1 голос
/ 29 ноября 2011

Метод getResource() сначала ищет ресурс в родительском классе;если родитель имеет нулевое значение, выполняется поиск пути загрузчика классов, встроенного в виртуальную машину.В случае ошибки этот метод вызовет findResource(String) для поиска ресурса.Так что после всего этого, если он возвращает ноль, проблема в imagepath ergo IMG_URL.Также обратите внимание, что он возвращает ноль, если ресурс не может быть найден, или у инициатора нет соответствующих прав для получения ресурса.

...