grafika w JLabel

0

Witam,
mam problem z wyswietleniem grafiki w JLabel. Wydaje mi się, że to jest banalny problem, ale jakoś nie mogę sobie poradzić. Aby lepiej to zobrazować stworzyłem prosty projekt w Netbeans: Maven->Java Aplication (ramka z JLabel i obrazkiem jako ikona).

Plik logo.png umieszczam w projekcie tak jak poniżej:

screenshot-20190325171359.png

wczytuję do JLabel:

screenshot-20190325171628.png

 jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/testowe/swingtest/ikony/logo.png")));

i przy Run Project wypluwa wyjątek:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at javax.swing.ImageIcon.<init>(ImageIcon.java:217)
	at testowe.swingtest.Frame.initComponents(Frame.java:34)
	at testowe.swingtest.Frame.<init>(Frame.java:18)
	at testowe.swingtest.Frame$1.run(Frame.java:87)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Jakoś nie widzę, aby ścieżka była niepoprawna. Gdy robię to samo, ale obraz wczytuję z zewnętrznego źródła, to wszystko jest ok. Może trzeba coś jeszcze skonfigurować/dodać do pom.xml?

0

To że według Ciebie i ludzkiego oka ścieżka się zgadza, nie znaczy, że JVM też tak to widzi :)
Spróbuj wczytać ten obrazek jako new File i sprawdź w debuggerze czy jest to różne od nulla. Jeśli będzie nullem, tzn, że masz złą ścieżkę.

0

Chodzi o to, że ja tej ścieżki ręcznie nie wpisuję. Tworzy się ona automatycznie po dodaniu ikony do JLabel w Design view.

...ale ok, poradziłem sobie z tym. Dodałem poniższy resource do pom.xml i teraz śmiga :)

<build>
  <resources>
    <resource>
      <directory>src/main/java</directory>
        <includes>
          <include>**/*.png</include>
          <include>**/*.jpg</include>
          <include>**/*.gif</include>
        </includes>
      </resource>
   </resources>
<build> 

https://netbeans.org/bugzilla/show_bug.cgi?id=187521

0

Jakbyś tworzył strukturę projektu zgodnie z konwencją mavenową, to maven by sam załapał i spakował do JARa

src |
    |-- main
        |-- java
            |-- {package-name}
        |-- resources
    |-- test
        |-- java
            |-- {package-name}
        |-- resources

https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
https://www.baeldung.com/maven-directory-structure

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