جافا سوينغ:عرض الصور من داخل الجرة
-
09-06-2019 - |
سؤال
عند تشغيل تطبيق Java من Eclipse، يظهر ImageIcon الخاص بي على ما يرام.
ولكن بعد إنشاء الجرة، من الواضح أن المسار إلى الصورة قد أصبح خاطئًا.
هل هناك طريقة لاستخراج صورة من الجرة في وقت التشغيل حتى أتمكن من فتحها بعد ذلك؟أو هل هناك طريقة أفضل للقيام بذلك؟
أرغب في توزيع ملف jar واحد إن أمكن.
المحلول
لإنشاء ImageIcon
من ملف صورة داخل نفس الجرار يتم تحميل الكود الخاص بك:
new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))
Class.getResource
تقوم بإرجاع عنوان URL لمورد (أو null
!). ImageIcon
يحتوي على مُنشئات يتم تحميلها من عنوان URL.
لإنشاء عنوان URL لمورد في جرة ليست على "مسار الفئة" الخاص بك، راجع وثائق java.net.JarURLConnection
.
نصائح أخرى
يمكنك تجربة شيء مثل:
InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");
في ملف JAR الخاص بك، قد يكون لديك بنية دليل مكونة من:
MyJAR.jar
- com (ملفات الفصل الدراسي هنا)
- الصور
----image.jpg
يعمل هذا بالنسبة لي لتحميل وتعيين صورة خلفية جزء المحتوى:
jar (أو مسار البناء) يحتوي على:
- com
- img
---- bg.png
جافا تحتوي على:
JFrame f = new JFrame("Testing load resource from jar");
try {
BufferedImage bg = ImageIO.read(getClass().getResource("/img/bg.png"));
f.setContentPane(new ImagePanel(bg));
} catch (IOException e) {
e.printStackTrace();
}
تم اختباره والعمل في كل من تنفيذ الجرة وغير المعبأة (هذا هو المصطلح الفني).
بالمناسبة getClass().getClassLoader().getResourceAsStream("/img/bg.png")
- الذي جربته أولاً - أعاد لي InputStream فارغًا.
في netbeans 8.1، ما قمت به هو تضمين مجلد الرموز والصور الأخرى التي تسمى موارد داخل src مجلد في ملف المشروع.لذلك كلما قمت بالبناء إناء file تم تضمين المجلد هناك. يجب أن تكون شجرة الملفات كما يلي:
- src (ملفات Java الموجودة في الحزم المصدرية موجودة هنا)
** الحزمة التي ذكرتها في المشروع **
- java
موارد
- image.jpg
يجب أن يكون الكود مثل:
jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
تحميل الصورة من ملف Jar أثناء وقت التشغيل هو نفس تحميل الصورة عند تنفيذها من IDE، على سبيل المثال netbeans، والفرق هو أنه عند تحميل الصورة من ملف JAR، يجب أن يكون المسار صحيحًا وملفه. حساسية الموضوع (مهم جدا).هذا يعمل بالنسبة لي
image1 = new javax.swing.ImageIcon(getClass().getResource("/Pictures/firstgame/habitat1.jpg")); img = image1.getImage().getScaledInstance(lblhabitat1.getWidth(), lblhabitat1.getHeight(), Image.SCALE_SMOOTH); lblhabitat1.setIcon(new ImageIcon(img));
إذا كانت p في "/Pictures/firstgame/habitat1.jpg" مكتوبة بأحرف صغيرة فلن تعمل.التحقق من المسافات والحالات والتهجئة