Возникли большие проблемы с развертыванием Java-апплета
-
05-07-2019 - |
Вопрос
Я новичок в 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 не рекомендуется, поскольку в конечном итоге он считывает данные из локальной файловой системы.Это неприемлемо для большинства пользователей Интернета.