Имея много проблем с развертыванием Java-апплета - PullRequest
0 голосов
/ 08 марта 2009

Я новичок в Java. Я просто пытаюсь создать файл .jar своего апплета, чтобы я мог запустить его из своего браузера. Вот как выглядит моя структура каталогов:

C:\java\pacman\src

содержит все файлы классов .java.

C:\java\pacman\assets

содержит около 4-5 изображений и аудиофайлов.

Если я попытаюсь использовать следующий код:

Image someFile=getCodeBase().toString() + "file.png";

Результат getCodeBase() равен

file:/C:/java/pacman/bin/

Однако следующий код не загружается:

   img=new ImgHelper(getCodeBase().toString() + "assets/");
   ImageIO.read(new File(img.getPath("pacman.png")));

Перемещение моей папки «assets» в папку «bin» также не помогло. Он пытается загрузить:

file:/C:/java/pacman/bin/assets/pacman.png

говоря:

Can't read input file!

Но URL, который он дал, открывается нормально, если я вставлю его в бег и нажму enter:

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

public ImgHelper(String dir)
{
    //this.imgDir=dir;
    imgDir="C:\\java\\pacman\\assets\\";
}

Который работает отлично. Но я хочу разместить это на веб-сервере, и я понятия не имею, как / что я должен делать, чтобы все изображения и звуки работали. Есть идеи?

Спасибо ...

Ответы [ 3 ]

1 голос
/ 08 марта 2009

Почему бы не поместить все это в файл JAR, а затем вызвать Class.getResourceAsStream?

Файл JAR лучше, так как это одно соединение HTTP, а не одно соединение HTTP на файл. Кроме того, гораздо более гибкий способ использования потока, чем файл.

getResourceAsStream будет работать, когда файлы также не находятся в JAR, они должны быть относительно файла класса.

РЕДАКТИРОВАТЬ:

Другое дело, метод File не будет работать, если апплет находится на сервере, так как он будет пытаться открыть файл с локальной машины (думаю, я не пробовал), а не с сервера. Даже если он попытался создать путь к файлу на сервере, который не будет работать.

0 голосов
/ 08 марта 2009

Есть два возможных решения:

  • Изображения могут присутствовать вне апплета JAR. Затем апплет может быть инициализирован с указанием местоположения каталога, в котором находятся изображения. Получив эту информацию, вы сможете загружать изображения с сервера. В руководстве Sun Java приведен пример использования параметра апплета для передачи каталога источника изображения.
  • Загрузчик класса апплета может быть использован для загрузки изображений из JAR апплета, используя метод getResourceAsStream ().

PS: Было бы полезно, если бы вы сослались на раздел учебников по Java для загрузки значков для вашего приложения . В этом же разделе обсуждается множество вопросов, высказанных TofuBeer и John .

РЕДАКТИРОВАТЬ: использование File API не рекомендуется, потому что он заканчивает чтение локальной файловой системы. Это неприемлемо для большинства пользователей Интернета.

0 голосов
/ 08 марта 2009

Я согласен с tofubeer по поводу JAR, но если вы хотите разместить изображение на своем сервере, см. Учебник по изображениям апплета здесь . Кодовой базой будет любое местоположение вашего апплета на сервере, и вы также можете размещать изображения относительно этого на сервере. Используйте медиа-трекер вместе с методом Applet.getImage () для получения URL-адреса. Из примера:

 my_gif = getImage(getDocumentBase(),"imageExample.gif");
...