2016-03-31 21 views
0

ImageIcon'u genişleten bir özel sınıf oluşturuyorum, böylece dosya URL'sini ve belirli bir rengi ileterek, görüntüyü tekrar yükleyerek yükler. Bu sınıf, farklı kullanıcı arabirimleri geliştirmek için kullandığım bir .jar dosyasında paketlenmiştir (buna UI.jar diyelim).Kaynak veya farklı klasörlerdeki resimlerin yüklenmesi

Bu sınıf, UI.jar içinde paketlenmiş bir klasörde bulunan görüntülerin, başka bir .jar dosyasında bulunan diğer görüntülerin, muhtemelen bir .jar'de bulunmayan klasörlerde bulunan diğer URL'lerdeki diğer resimlerin yüklenmesi için tasarlanmalıdır. Yani bu kodu geliştirdi:

BufferedImage bi = null; 
try{ 
    //CASE 1: the image related to this url is packed in a .jar file 
    bi = ImageIO.read(resourceClass.getResource(url)); 
}catch(Exception e){ 
    try{ 
     //CASE 2: the image related to this url is somewhere else 
     bi = ImageIO.read(new File(url)); 
    }catch(Exception ee){ 
     //CASE 3: none of the above 
     ee.printStackTrace(); 
    } 
} 

Bu yöntem çalışır, ama sorun ben ImageIcon uzanır benim özel sınıfın bir argüman olarak resourceClass geçmek her zaman var olduğunu ve bu biraz zor ve rahatsız.

Hedefime ulaşmanın başka yolları var mı?

+0

Küçük performans/kod sorunu: Dışarıdan "try/catch" öğesine gerek yoktur. Bunun yerine, 'Class.getResource (url)' 'null' döndürdüğünü test edebilirsiniz. – haraldK

cevap

1

Burada üç alternatif

  1. getClass(). GetResource (String)
  2. ImplementationClassName.class.getResource (String)
  3. Reflection.getCallerClass(). GetResource (String)
bkz

Bunlardan herhangi biri işi yapmalıdır.

İlk üç'ü beğenmedikten sonra bunu deneyebilirsiniz, ancak bu daha da çirkin.

+0

Ayrıca 'getClass(). GetClassLoader()' –

+0

Prolem, 'getClass()' yönteminin her zaman söz konusu sınıfı çağırdığı sınıftır ve benim durumumda, UI.jar'da paketlenen sınıftır. Yani, argüman olarak ilettiğim url, başka bir dizinde bulunan veya başka bir kutuda bulunan bir dosyaya başvuruyorsa (burada UI.jar, bu kavanozun bağımlılığıdır), yöntem işe yaramıyor. Bu durumda – Roberto

+0

Bu durumda Reflection.getCallerClass sizin. – tejoe

İlgili konular