Eclipse ไม่สามารถโหลดภาพได้หลังจากส่งออกแพ็คเกจ Jar?
เหตุผลสำหรับปัญหานี้ส่วนใหญ่เป็นเพราะปัญหาเส้นทางซึ่งมักจะทำงานตามปกติในโครงการ แต่เมื่อบรรจุลงในขวดมันไม่สามารถแสดงได้ตามปกติ มาสรุปวิธีการแก้ปัญหานี้กันเถอะ:
1. แก้ปัญหาโดยใช้ไฟล์ทรัพยากรภายนอก
หลังจากบรรจุภัณฑ์โครงการเพื่อสร้าง JAR ให้สร้างโฟลเดอร์ใหม่และวางไฟล์รูปภาพทั้งหมดที่ใช้ในโครงการและสร้างไฟล์ JAR ในไดเรกทอรีนี้ ตราบใดที่รหัสอ้างอิงไฟล์รูปภาพอย่างถูกต้องเช่น: imageicon image = ใหม่ imageicon (swingresourceManager.getImage ("icons/logo.gif"));
ด้วยวิธีนี้ไฟล์ภาพและไฟล์คลาสจะไม่ถูกวางไว้ในแพ็คเกจด้วยกัน ไฟล์คลาสอยู่ในแพ็คเกจและไฟล์ภาพอยู่ในไดเรกทอรีรูทของโครงการ
2. แก้ปัญหาโดยใช้ไฟล์ทรัพยากรภายใน
ใส่ไฟล์รูปภาพที่ใช้ในแพ็คเกจโครงการและเมื่อบรรจุภัณฑ์ไฟล์รูปภาพจะถูกป้อนลงในไฟล์ JAR ในเวลาเดียวกัน วิธีนี้ควรใช้อย่างใดอย่างหนึ่งต่อไปนี้ในรหัสเฉพาะ:
Imageicon image = ใหม่ imageicon (this.class.getResource ("icons/logo.gif"));ต่อไปนี้เป็นคำอธิบายโดยละเอียดของวิธีนี้:
เมื่อคุณเขียนโปรแกรมสำหรับอินเทอร์เฟซกราฟิกคุณต้องใช้แหล่งข้อมูลต่างๆ ดังนั้นเมื่อคุณเผยแพร่โปรแกรมของคุณคุณจะเผยแพร่ทรัพยากรภาพเหล่านี้อย่างไร
วิธีที่ง่ายที่สุดคือการจัดทำแพ็คเกจทรัพยากรรูปภาพเหล่านี้พร้อมกับไฟล์คลาสของคุณลงในไฟล์ JAR ที่เรียกใช้งานได้เพื่อให้คุณต้องเผยแพร่ไฟล์ JAR เพื่อรวมเนื้อหาทั้งหมดและผู้ใช้สามารถเรียกใช้โปรแกรมได้เพียงคลิกสองครั้งที่ไฟล์ JAR หากคุณแพ็คเกจรูปภาพในไฟล์ JAR คุณจะเข้าถึงรูปภาพเหล่านี้ได้อย่างไรเมื่อเขียนโปรแกรม
เส้นทางสำหรับรูปภาพเหล่านี้คืออะไร? คุณสามารถใช้วิธี GetResource () เพื่อแก้ปัญหานี้
ที่นี่เราวิเคราะห์สองสถานการณ์ที่พบบ่อยที่สุด:
1. คุณแพ็คเกจทรัพยากรทั้งหมดลงใน Andy.jar และชั้นเรียนของคุณอยู่ในแพ็คเกจ: แพ็คเกจ Andycpp; ทรัพยากรรูปภาพทั้งหมดของคุณถูกวางไว้ในโฟลเดอร์รูปภาพและโฟลเดอร์รูปภาพยังอยู่ในแพ็คเกจ Andycpp ด้วยวิธีนี้เส้นทางสุดท้ายคือ:
Andy.jar
| __andycpp
| __ guitest.class
| __ ภาพ
| __ snap1.jpg
เนื่องจากโฟลเดอร์รูปภาพและคลาสที่อ้างอิงมันอยู่ในระดับเดียวกันคุณจึงสามารถเข้าถึงได้ผ่านเส้นทางสัมพัทธ์:
java.net.url imgurl = guitest.class.getResource ("images/snap1.jpg"); imageicon img1 = imageicon ใหม่ (imgurl);สิ่งที่ต้องให้ความสนใจที่นี่คือปัญหากรณี! ด้านในของไฟล์ JAR นั้นมีความละเอียดอ่อนตัวพิมพ์ใหญ่ดังนั้นหากภาพตัวเองเรียกว่า snap1.jpg และคุณเขียนพา ธ ไปยังรูปภาพ/snap1.jpg แล้วภาพจะไม่พบ ควรสังเกตว่าแต่ละคลาส (หมายเหตุไม่ใช่วัตถุ) มีวิธี getResource () แต่คุณไม่สามารถใช้งานได้อย่างไม่เป็นทางการ คุณสามารถใช้วิธี getResource () ของคลาสที่อยู่ในระดับเดียวกับโฟลเดอร์รูปภาพ ตัวอย่างเช่นในรูปด้านบนคลาส Guitest และรูปภาพอยู่ในระดับเดียวกันดังนั้นคุณต้องใช้วิธี getResource () ของคลาสนี้
2. ในอีกกรณีหนึ่งหากคุณมีชั้นเรียนมากมายและโครงสร้างแพ็คเกจนั้นซับซ้อนมากก็ไม่น่าเป็นไปได้ที่คุณจะวางรูปภาพและชั้นเรียนในระดับเดียวกัน แต่คุณควรวางรูปภาพไว้ที่ชั้นนอกสุดและให้คลาสทั้งหมดเข้าถึงรูปภาพผ่านเส้นทางสัมบูรณ์:
Andy.jar
| __andycpp
| __ guitest.class
| __ ภาพ
| __ snap1.jpg
รหัสมีดังนี้:
java.net.url imgurl = guitest.class.getResource ("/images/snap1.jpg"); imageicon img1 = ใหม่ imageicon (imgurl);คุณเคยเห็นความแตกต่างจากรหัสข้างต้นหรือไม่? ความแตกต่างนั้นบอบบางมาก เพียงเพิ่ม backslash "/" ด้านหน้าของ "ภาพ" backslash นี้แสดงถึงไดเรกทอรีรากและไม่มี backslash แสดงถึงเส้นทางสัมพัทธ์ ..
บทความข้างต้นพูดสั้น ๆ เกี่ยวกับปัญหาเส้นทางของภาพบรรจุภัณฑ์ Java ลงในขวดเป็นเนื้อหาทั้งหมดที่ฉันได้แบ่งปันกับคุณ ฉันหวังว่ามันจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น