Dodanie obrazu z URL w NetBeans

0

Witam
Jestem początkujący w programowaniu i potrzebuje pomocy przy dodaniu obrazu do projektu który robię w programie NetBeans 16.

Dodaje do GUI obraz w następujący sposób:
1 klikam prawym przyciskiem na projekt dalej New > Java Package
2 nazywam go Obrazy
3 przeciągam do niego plik ze zdjęciem o nazwie abc.png
4 w GUI wstawiam nowy panel a w nim jLabel
5 klikam właściwości jLabel i tam gdzie jest icon klikam "..."
6 wybieram Image Within Project, Package > Obrazy, no i w File wyświetla mi się nazwa obrazu abc.png wiec ją wybieram
7 daje ok i obraz mam w GUI
8 odpalam program przez kliknięcie run i wyskakuje błąd który wkleiłem poniżej a okienko wcale się nie odpala.
9 jak usuwam ten obraz to program uruchamia się bez problemu

Zauważyłem że jak w pkt 6 wybieram External Image > File or URL > wskazuje ścieżkę do tego samego obrazu, znajdującego się na komputerze, to mogę bez żadnych problemów odpalić program. Tylko wtedy zapewne gdy przeniosę program na inne urządzenie to nie wczyta mi go, bo obraz zostanie na moim komputerze, dobrze myślę?

Dodam jeszcze że gdy w pkt 6 wybieram External Image > Import to Project to mam ten sam błąd co za pierwszym razem.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "java.net.URL.toExternalForm()" because "location" is null
	at java.desktop/javax.swing.ImageIcon.<init>(ImageIcon.java:232)
	at com.mycompany.matematyka4.ObliczSprytnie.initComponents(ObliczSprytnie.java:199)
	at com.mycompany.matematyka4.ObliczSprytnie.<init>(ObliczSprytnie.java:17)
	at com.mycompany.matematyka4.ObliczSprytnie$1.run(ObliczSprytnie.java:312)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time:  3.164 s
Finished at: 2023-01-14T11:37:31+01:00

co robię źle ? pomóżcie.

Wszystkiego uczę się sam i niestety nie mam kogo się zapytać jeśli mam jakieś niejasności. Może ktoś mający pojęcie o Javie i pracujący na NetBeans da mi do siebie jakiś kontakt żebym czasem mógł mu głowę zawrócić od czasu do czasu? Byłbym wdzięczny. ;)

0

problem pojawia się, gdy próbujesz dodać obraz do projektu przeciągając go do utworzonego wcześniej pakietu "Obrazy" i ustawiając go jako ikonę w komponencie jLabel

  • w projekcie utwórz nowy folder o nazwie "resources",
  • umieść tam plik z obrazem,
  • zmodyfikuj kod, w którym ustawiasz ikonę w jLabel, tak aby pobierała obraz z folderu "resources" za pomocą klasy ClassLoader.
    kod powinien wyglądać mniej więcej tak:
URL url = getClass().getResource("/resources/abc.png");
ImageIcon icon = new ImageIcon(url);
jLabel.setIcon(icon);

w ten sposób obraz zostanie dołączony do projektu i będzie dostępny niezależnie od miejsca w którym jest uruchamiany program

1 użytkowników online, w tym zalogowanych: 0, gości: 1