Как создать работающее приложение Java?
Лучше всего, если у вас будет один jar файл, который можно запустить на любом компьютере, поддерживающем Java т.е. с предустановленной виртуальной java машиной
При этом этот файл вы сможете запустить из любого места.
Как сделать такой jar файл?
Рассмотрим простейший пример для начинающих.
Предположим, что вы написали код для игры в шахматы.
Т.е. у вас есть какой-то набор классов:
Board.java, Main.java, Figures.java
Все ваши классы относятся к пакету chess и соответcтвенно находятся в каталоге chess
Сам этот каталог находится в вашем рабочем каталоге - откуда вы можете вызвать java.exe без параметров и получить список опций команды. В нашем случае, это каталог c:/jwork
Все ресурсы вашей программы хранятся в подкаталоге res каталога chess. Это могут быть картинки, настройки и пр..
Конкретно картинки ваших шахмат, например картинки короля, королевы и пр.. хранятся в подкаталоге images подкаталога res
В общем теперь структура каталогов должна быть вам понятна.
Давайте упакуем ее в jar
Скомпилируйте ваши классы.
Затем:
Сначала создадим файл mymanifest (без расширения) со следующим содержимым:
Manifest-Version: 1.2
Main-Class: chess.Main
Created-By: 0.0.1 (O. V. Dorozhko)
И поместим этот файл в каталог chess
Затем создадим *.bat файл следующего содержания:
jar cvfm my_chess.jar chess/mymanifest chess/*.class chess/res
И запустим его на выполнение из каталога c:\jwork т.е. вашего рабочего каталога
Выполненная команда создаст my_chess.jar. Вы найдете его в вашем рабочем каталоге
Можем запустить его.. Увы, наши шахматы исчезли так как картинки фигур да и самой доски оказались не найдены.
Если вы создавали BufferedImage таким путем:
String fname = “/res/images/king.png”;
BufferedImage img = ImageIO.read(new File(fname));
То это не будет работать в том случае когда ресурсы надо доставать из jar файла.
Правильно использовать следующую конструкцию:
JarResources jar = new JarResources (”chess.jar”);
Image logo = Toolkit.getDefaultToolkit().createImage (jar.getResource (”chess\res\images\king.png”);
Более подробно вы можете прочитать об этом
здесь