למומחי ה-java:אני רוצה להכניס

GilBates

New member
למומחי ה-java:אני רוצה להכניס ../images/Emo12.gif

לתוך ה-JAR שלי קבצים נוספים כגון תמונות למינהם שיופיעו ב-GUI, וקבצים אחרים שהם קבועים במערכת. האם זה אפשרי בכלל? איך עושים את זה?
 

voguemaster

New member
ברור!

אתה מוסיף מה שאתה רוצה להוסיף כשאתה מייצר את ה-JAR! לא ברור לי מה הבעיה.
 

GilBates

New member
הבעיה היא איך אני ניגש מהתוכנית

אל המיקום שלהם ב-JAR? להוסיף לתוך ה-JAR אין לי בעיה נניח שיש לי 4 PACKAGES בתוך ה-JAR, שמהווים 4 תיקיות ראשיות ותחתם כמובן הקלאסים המקומפלים. ניסיתי להוסיף ל-JAR ספרית IMAGES איך אני מגיע אליה מתוך התוכנית ניסיתי:
ImageIcon image = new ImageIcon (getClass ().getResource ("images/MyCoolImage.jpg"));​
וזה עדיין לא הולך.. הוא לא מוצא לי את הקובץ (אני כנראה לא יודע איפה הוא מחפש...)
 

voguemaster

New member
הממממ ../images/Emo13.gif

ה-CP הוא הדרך של ג'אווה למצוא CLASSים ודברים אחרים. כלומר, אם אתה משתמש בתוכנית שלך במחלקה מסוימת, ג'אווה חייבת לדעת למצוא אותה. יש CP עבור קומפילציה. שם אתה אומר ל-JAVAC איפה למצוא את קובצי המקור של המחלקות שאתה משתמש בהן, אם הן לא נמצאות במקום טריויאלי (יש JARים מסוימים כאלו). יש CP עבור הרצה והוא ה-CP שבד"כ מדברים עליו. הוא אומר ל-JAVA (מה שמריץ את ה-JVM) איפה למצוא את קובצי ה-CLASS שמייצגים את הקוד שלך. אם אתה מריץ מתוך סביבת פיתוח אז סביר להניח שסביבת הפיתוח דואגת לתת CP שמציין איפה החבילות שייצרת. אם אתה מריץ משורת פקודה תצטרך כמובן לתת נתיב אל החבילות כדי שיהיה אפשר לטעון את המחלקות משם. באותו אופן, כשדברים נמצאים בתוך JAR מסוים אתה חייב להוסיף את ה-JAR ל-CP שלך. ואז, לפחות עבור מחלקות, כשאתה ניגש למחלקה מסוימת שנמצאת בחבילה מסוימת בתוך JAR, אין ל-JAVA בעיה. היא יודעת איך למצוא את ה-JAR והיא מוסיפה לזה את שם החבילה ומזה מקבלת את הנתיב אל המחלקה. מה שלא הבנתי זה את השימוש שעשית ב-getResource.
 

GilBates

New member
לקחתי את זה מדוגמה - מצ"ב ה-URL

http://forum.java.sun.com/thread.jspa?threadID=414823&messageID=1834645
 

voguemaster

New member
אוקיי בוא נראה

האם יצרת את ספריית ה-images שלך בתוך ה-JAR כאילו היא הייתה חבילה בפני עצמה ? כי מה שכתוב בקישור הוא: Often people create an images subdirectory under some main package. תחת חבילה שנמצאת ב-JAR. שם אתה יוצר ספריית images, וזה אמור לעבוד. שיטה נוספת היא לעשות משהו יעיל יותר. הבעיה עם הצורה הזו של getResource היא שבכל פעם שאתה יוצר ככה תמונה אתה מבקש גישה אל ה-JAR, הוא נפתח, המידע נשלף ואז מקודדת תמונה ויוצא לך אובייקט Image. הגישה הנכונה יותר היא מראש לקרוא את כל ה-JAR אם אתה יכול. את ה-JAR אפשר לקרוא עם ZipInputStream נדמה לי. עבור כל ENTRY שאתה מקבל ממנו אתה יכול לקרוא את ה-ENTRY לתוך מערך בתים. אז אתה יכול לקודד כל מערך בתים כזה וליצור ממנו אובייקט Image. את התמונה החדשה אתה דוחף לאיזשהו Hashtable שממפה בין שמות לאובייקטי תמונה וככה בעצם יש לך אובייקט שמכיל את כל התמונות ובכל פעם שאתה צריך תמונה אתה מבקש אותה ממנו ע"י נתינת השם. אפשר את המימוש של המיפוי גם לעשות נורא בקלות ע"י ResourceBundle שזו מחלקה של ג'אווה.
 

GilBates

New member
ניסיתי ליצור את הספריה Images

תחת אותה חבילה שאחד הקלאסים משתמש בתמונות שם (ב-form שלו). זה לא עבד ע"מ להבהיר שוב אני כותב כרגע מערכת עם מס' חבילות ואורז אותה ב-JAR. אני מעוניין להעביר ללקוח שלי JAR אחד בלבד שיכלול את הכל בתוכו (ולא להעביר לו קבצים חיצוניים נוספים שהוא יצטרך למקמם באותה תיקיה של ה-JAR). אני רוצה לשים קבצי resources (למשל: התמונות וקבצי פרמטרים וקלט) גם כן בתור ה-JAR ושהקלאסים ב-JAR ידעו לקרוא לתמונות שנמצאות באותו JAR.
 

voguemaster

New member
המממ הבנתי אותך

כשיהיה לי פנאי אני אעשה איזה דוגמית קטנה לעניין הזה, אם לא תסתדר עד אז.
 

GilBates

New member
תודה../images/Emo45.gif אני ממתין, התייאשתי מזה

אז אני ממשיך לעשות דברים אחרים...
 
למעלה