Возникли большие проблемы с развертыванием Java-апплета

StackOverflow https://stackoverflow.com/questions/623977

Вопрос

Я новичок в 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-адрес, который он дал, открывается нормально, если я вставлю его в run и нажму Enter:

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

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

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

Спасибо...

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

ПС:Было бы полезно, если бы вы сослались на раздел в Учебники по Java для загрузки значков для вашего приложения.В этом же разделе обсуждаются многие моменты, выдвинутые ТофуПиво и Джон.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top