Опаковане на файлове с изображения в JAR архив
При разработването на приложението поставихме всички изображения в корена на устройството C:\ и посочихме пътя до тях при зареждане:
fon = ImageIO.read(нов файл("c:\\fon.png"));
catch (Exception ex) <>
След отстраняване на грешки в приложението променихме пътя до изображенията от корена на устройството C:\ към пътя към текущата папка:
fon = ImageIO.read(нов файл("./fon.png"));
catch (Exception ex) <>
След това приложението беше стартирано, така че файловете с разширение *.class да се компилират отново. И след това беше създаден JAR архивът.
При този подход всички файлове с изображения трябва да са в същата папка като JAR архива. При този подход може да искате да поставите файловете с изображения и в JAR архива. И има такава възможност! В този случай цялата игра, включително изображенията, ще бъде представена само от един JAR файл.
Първо, пътят до изображенията трябва да е относителен към JAR архива. Да кажем, че по време на разработката пътят е посочен спрямо корена на устройството C:\
fon = ImageIO.read(нов файл("c:\\fon.png"));
catch (Exception ex) <>
Сега трябва да го напишете така:
catch (Exception ex) <>
Вместо да се създава нов обект File(), сега се използва pole.class.getResource(), името на файла се посочва в двойни кавички, без да се посочва пътят на файла. Първата дума е името на класа, в който се зарежда изображението. В този случай това е клас, наречен полюс:
Такива промени трябва да се направят във всички класове във вашия проект, в които се зареждат изображения. След всички промени приложението трябва да бъде стартирано! В този момент файловете с разширение *.class ще бъдат компилирани отново, но като се вземат предвид направените промени. По време на стартиране ще видите, че вашиятизображенията не се показват. Това е правилно!
Второ: трябва да отворите Моят компютър и да отидете до папката, където се намира пакетът JAVA. По подразбиране се намира:
C:\Program Files (x86)\Java\ или C:\Program Files\Java\ (Вижте Фигура 2). Вътре в него ще видите папка, наречена JDK - това е пакетът на разработчика (вижте фиг. 2). Преминаваме в него и вътре в папката BIN (вижте фиг. 3).
Папката BIN съдържа файлове, които средата за разработка на Eclipse използва за стартиране на Java програма, компилирането й в *.class файлове и създаване на JAR архив. Помислете за тях:
1. javaw.exe - стартира програмата за изпълнение
2. javac.exe - компилира програмата от файлове с разширение *.java до файлове с междинен байт код с разширение *.class
3. jar.exe - създава JAR архив и поставя в него файлове с разширение * .class и допълнителни ресурси (изображения и др.)
Средата за разработка на Eclipse автоматично използва тези файлове според нуждите.
Имаме нужда от помощна програма за създаване на JAR архив - файла jar.exe
В папката BIN трябва да създадете BAT файл, нека го наречем make.bat.
В този файл пишем:
jar cfm zmeika.jar manifest.mf *.class *.png
Това е извикване на помощната програма jar.exe с допълнителни параметри. При такова извикване всички файлове с разширения *.class и *.png, които ще се намират в текущата папка BIN, ще се поберат в JAR архива. Името на архива ще бъде zmeika.jar. Нека запазим файла make.bat (вижте Фигура 4).
Освен това, когато създавате архиви, трябва само да промените името на JAR архива:
jar cfm zmeika.jar manifest.mf *.class *.png
Всичко останало ще остане непроменено.
Във файла make.bat сме посочили файл с име manifest.mf – това е т.нарманифест, този файл указва името на основния клас на нашето приложение. Главният клас съдържа метода main() – това е входната (стартова) точка на приложението.
Вътре в папката BIN ще създадем filemanifest.mf, вътре във файла ще напишем:
Нека запазим файла (виж Фиг. 5).
В този случай zmeika е името на основния клас приложение. Когато пишете текст във файла manifest.mf, трябва да бъдат изпълнени някои изисквания:
1. Главните букви имат значение!
2. След двоеточието трябва да поставите интервал.
3. След като посочите името на основния клас, трябва да извършите преместване на ред с натискане на клавиша Enter.
При най-малката грешка във файла manifest.mf, създаването на JAR архив НЯМА ДА РАБОТИ.
Освен това, когато създавате архиви, във файла на манифеста ще трябва да промените само името на основния клас.
Трето: в папката BIN, където вече се намират файловете manifest.mf и make.bat, трябва да поставите всички файлове с изображения (с разширение *.png).
Когато създавате JAR архив, всички *.png файлове от папката BIN ще бъдат опаковани. Следователно не трябва да има допълнителни PNG файлове в папката BIN.
Четвърто, в папката BIN, където вече се намират файловете manifest.mf, make.bat, трябва да поставите всички файлове на вашето приложение с разширение *.class.
Пето: трябва да стартирате файла make.bat. Това става чрез двукратно щракване с левия бутон на мишката върху файла make.bat (вижте Фигура 7).
Файлът make.bat ще изпълни помощната програма jar.exe и ще й предаде необходимите параметри, като например името на манифестния файл (manifest.mf). Ако всичко работи правилно, тогава JAR архив с посоченото име ще се появи в папката BIN (вижте Фигура 8).
Този JAR архив съдържа файлове с изображения в себе си. Сега, за да прехвърлите играта на потребителя, е достатъчно да прехвърлите само един файл. JAR архивът е изпълним наизпълнение, но все пак архив. Следователно, той може да бъде извлечен от него с конвенционален архиватор. Ако направите това, ще видите съдържанието му (вижте фиг. 9) Вътре в архива има файлове с разширение *.class, файлове с разширение *.png и папка META-INF. Папката META-INF съдържа файла MANIFEST.MF (манифестен файл).
Предупреждение. Стартирането на JAR архив може да причини проблеми, ако се намира в папка, чийто път съдържа български знаци. В този случай JAR архивът може да не стартира. Този проблем може да възникне в зависимост от операционната система и текущата версия на Java Virtual Machine.