سؤال

عند تشغيل تطبيق 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" مكتوبة بأحرف صغيرة فلن تعمل.التحقق من المسافات والحالات والتهجئة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top