Java "Cannot invoke "java.net.URL.toExternalForm()" because "location" is null at java.desktop/javax.swing.ImageIcon" || Netbeans" hatası

Lian La-Fey

Kilopat
Katılım
23 Haziran 2016
Mesajlar
3.102
Makaleler
18
Çözümler
12
İyi günler.

GitHub'dan proje arkadaşımın reposunu clonelayıp programı çalıştırdığımda bu hatayı alıyorum. Bir türlü çözemedim. Resimlerin doğru yerde olduğundan eminim. Zaten doğru yerde olmasaydı dizaynda göremezdik diye düşünüyorum.

Bu arada başka bir projemi GitHub'a yükleyip tekrar geri GitHub'dan cloneladığım zaman yine ayni hatayı alıyorum. Projelerdeki resim dosyalarına cloneladiktan veya GitHub'a yükledikten sonra bir şeyler oluyor ama bir türlü anlayamadım. Ayrıca sadece tek bir resimle alakalı değil. İlk Hertz logosu initialize edildiği için ilk once 73. satırdaki kodda hata çıkıyor.

4.png


5.png
 
Son düzenleyen: Moderatör:
Eğer burada cevap bulamazsan bu foruma konu açmanı tavsiye ederim:
 
Maven projesi mi bu? Maven ise build edip denenmeli.

"getClass().getResource("/images...") -> bu null return ediyor.
Image olmasi gereken yerde olsa dahi olsa classloader'in bunu bulmasi gerekiyor.

Programi nasil calistiriyorsunuz? Eger maven programi olarak tasarlanip bu sekilde package ediliyorsa ancak IDE uzerinden entegre JVM ile calistirmaya calisiyorsaniz classLoader farkli dizinleri gorebilir.

Dosyanin absolute adresini kullanarak kodu asagidaki sekilde degistirebilirsin workaround olarak:

Java:
//URL logoUrl = getClass().getResource("/images/hedehodo"); -> Bu class loader da bulunamiyor
URL logoUrl = new File("C:\\dosyanin\\tam\\adresi").toURI().toURL(); // linux ise /home/dosya/tamAdresi
new ImageIcon(logoUrl);
 
Maven projesi mi bu? Maven ise build edip denenmeli.
Ant.
Dosyanin absolute adresini kullanarak kodu asagidaki sekilde degistirebilirsin workaround olarak:
Absolute adres kullanınca benim dosya adresimle arkadaşımın dosya adresi farklı olacağı için projeyi her pull veya push ettiğimizde sıkıntı olacaktır diye tahmin ediyorum.

Aslında projenin path'ini açılan yere göre değiştirsek hem arkadaşımda hem ben de sıkıntısız çalışır gibi. Biraz araştırınca böyle yaptım. Ben de çalıştı.

Java:
        URL imageUrlOpenEye = null;
        URL imageUrlCloseEye = null;
        
        File currentDirFile = new File("");
        String helper = currentDirFile.getAbsolutePath();
        
        try {
            imageUrlOpenEye = new File(helper + "\\src\\images\\openEye.png").toURI().toURL();
            imageUrlCloseEye = new File(helper + "\\src\\images\\closeEye2.png").toURI().toURL();
        } catch (MalformedURLException ex) {
            System.out.println( ex + "");
        }

Ama başka bir sorun ise kodları kendim yazarsam design kısmında gözükmeyecek ve tasarım da sıkıntılar çıkabilir diye düşünüyorum.

Dün gece keşfettiğim bir şey ise cloneladığım projeyi VS Code'da run ettiğim zaman sıkıntısız çalıştı. Daha sonra ise cloneladigim projeye içinde görsel olan kayıt formu eklediğimde VS Code'da da aynı hatayı adlım. Daha sonra Netbeans'te auto-generated kodu VS Code'da silip aynı yerde aynı şekilde yazınca çalıştı. Çok garip bir bug anlamadım gitti. Tasarımı falan Netbeans'ten yapıp bir sıkıntı olup olmadığını VS Code'da gözlemlemeyi planlıyorum. Yine de teşekkürler.
 
Ben bu sorunu çözdüm.
Atıyorum projenin yolu burada;
"NetBeansProjects/deneme"

daha sonra deneme/src/main/ dizinine resources adlı bir klasör oluşturuyorsun.
İstediğin gibi izin verilen resim dosyanı oluşturup, bu oluşturduğun klasöre ekle ve daha sonra NetBeans üzerinden icon eklenebilecek herhangi bir araca ekle.

Eklenebilecek örnek araç; jButton.

Eleştirmek gibi olmasın ama çok uğraştırdı başta. Rider C# böyle zor değildi.
 
Son düzenleme:

Yeni konular

Geri
Yukarı