Загрузка изображения в Java-апплет - PullRequest
2 голосов
/ 19 ноября 2009

Когда я пытаюсь запустить апплет в средстве просмотра апплетов, он не может найти ресурсы (изображение). Я пытаюсь загрузить ресурс так:

String cb= this.getCodeBase().toString();
String imgPath = cb+"com/blah/Images/a.png";
System.out.println("imgPath:"+imgPath);
java.net.URL imgURL = Applet.class.getResource(path);

но когда я запускаю его по пути просмотра приложений, это выглядит так: imgPath: файл: D: /Work/app/build/classes/com/blah/Images/a.png

хотя на этом пути есть изображение, такое файл префикса: вызывает проблемы, как я могу проверить этот код?

Будет ли этот код работать при развертывании на сервере, а кодовая база возвращает URL-адрес сервера?

Ответы [ 4 ]

4 голосов
/ 19 ноября 2009

Ваш апплет должен загружать изображения после загрузки? Или вам лучше бы связать необходимые графические ресурсы в банке с вашим апплетом?

Я ежедневно работаю над приложением на основе апплетов с большим количеством графики в графическом интерфейсе. Они упакованы в jar-файл. Вот что мы делаем:

// get the class of an object instance - any object.  
// We just defined an empty one, and did everything as static.
class EmptyClass{}
Class loadClass = new EmptyClass().getClass();
// load the image and put it directly into an ImageIcon if it suits you
ImageIcon ii = new ImageIcon(loadClass.getResource("/com/blah/Images/a.png"));
// and add the ImageIcon to your JComponent or JPanel in a JLabel
aComponent.add(new JLabel(ii)); 

Убедитесь, что ваше изображение действительно находится в банке, где вы думаете, это. Использование:

jar -tf <archive_file_name>

... чтобы получить список.

0 голосов
/ 30 июля 2012

Попробуйте этот код, это только 2 метода из класса, который я использую для загрузки изображений, но он отлично работает для загрузки при использовании апплета.

private URL getURL(String filename) {
    URL url = null;
    try 
    {
        url = this.getClass().getResource("" + extention + filename); //extention isn't needed if you are loading from the jar file normally. but I have it for loading from files deeper within my jar file like say. gameAssets/Images/ 
    }
    //catch (MalformedURLException e) { e.printStackTrace(); }
    catch (Exception e) { }

    return url;
}

// Наблюдатель в этом случае будет апплетом. Просто у класса есть что-то вроде этого: Апплет Наблюдатель

public void load(String filename) {

    Toolkit tk = Toolkit.getDefaultToolkit();
    image = tk.getImage(getURL(filename));
    while(getImage().getWidth(observerwin) <= 0){loaded = false;}
    double x = observerwin.getSize().width/2  - width()/2;
    double y = observerwin.getSize().height/2 - height()/2;
    at = AffineTransform.getTranslateInstance(x, y);
    loaded = true;
}

Я могу опубликовать остаток класса, который я использую, если необходимо

0 голосов
/ 19 ноября 2009

Загрузчик классов контекста должен работать с банками.

ClassLoader cl = Thread.getContextClassLoader();
ImageIcon icon = new ImageIcon(cl.getResource("something.png"), "description");
0 голосов
/ 19 ноября 2009

Просто используйте /com/blah/Images/a.png в качестве пути. getResource() достаточно умен, чтобы найти его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...