2011-07-27 10 views
23

Mam projektu Java w NetBeans 7.0.Jak poprawnie uzyskać obraz z folderu "Zasoby" w NetBeans

Chcę dodać obraz do pewnej etykiety dynamicznie. Obraz będzie różnił się w zależności od stanu programu.

Umieszczam jeden taki obraz, "filling.jpg", w folderze "resources" mojego projektu.

Chcę poprawnie dotrzeć do tego pliku (nie przez bezwzględną lub względną ścieżkę, ponieważ spowoduje to problemy podczas budowania pliku jar).

Więc znalazłem tą metodą:

ImageIcon fillingIcon = new ImageIcon(getClass().getClassLoader().getResource("filling.jpg")); 
labelFontFilling.setIcon(fillingIcon); 

Utrzymuje mi dać java.lang.NullPointerException. Ale jestem pewien, że istnieje ten obraz, ponieważ mogę przypisać obraz do etykiety z menu Właściwości NetBeans dla tej etykiety (ale nie chcę tego, chcę dodać obraz za pomocą kodu Java).

Co robię źle i jak mogę poprawnie uzyskać ten obraz?

+1

Czy możesz wydrukować ścieżkę, którą podano? Podobnie jak System.out.println (getClass(). GetClassLoader(). GetResource ("filling.jpg")), może to dać ci wskazówkę o ścieżce, której próbujesz użyć. –

+0

Zwraca wartość 'null', więc jest to problem z wyjątkiem. Ale nie mogę zrozumieć, dlaczego jego zwrot jest zerowy – ShockwaveNN

+1

i gdzie znajduje się folder zasobów utworzony w projekcie? czy to jest w ścieżce klas? –

Odpowiedz

20

Dzięki, Valter Henrique, z twoją wskazówką zdałem sobie sprawę, że po prostu wprowadziłem niewłaściwą ścieżkę do tego obrazu. W jednym z moich prób używam

String pathToImageSortBy = "resources/testDataIcons/filling.png"; 
    ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy)); 

Ale droga była poprawna nazwa wykorzystanie mojego projektu w drodze do zasobów

String pathToImageSortBy = "nameOfProject/resources/testDataIcons/filling.png"; 
ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy)); 
39

To był ból, przy użyciu NetBeans IDE 7.2.

  1. Trzeba pamiętać, że Netbeans sprząta folder Konstruowanie gdy odbudować, więc
  2. Dodaj folder zasobów do src folderu:

    • (projekt)
      • src
        • folder projektu (zawiera.Pliki java)
        • zasoby (cokolwiek nazwa chcesz)
        • obrazy (opcjonalne podfoldery)
  3. Po czyste/zbudować tę strukturę jest propogated w folderze Build:

    • (projekt)
      • build
        • klas
          • folderu pakiet projekt (zawiera wygenerowane pliki .class)
          • zasobów (twoje zasoby)
          • zdjęć (opcjonalnej podfoldery)

dostęp do zasobów:

dlabel = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("resources/images/logo.png"))); 

oraz:

pracował dla mnie. Zauważ, że w jednym przypadku występuje wiodący znak "/", a w drugim nie. Tak więc katalog główny ścieżki dostępu do zasobów to folder "klasy" w folderze kompilacji.

Kliknij dwukrotnie plik wykonywalny jar w folderze dist. Ścieżka do zasobów nadal działa.

15

Mam nieco inne podejście, które może być przydatne/bardziej korzystne dla niektórych.

W głównym folderze projektu utwórz folder zasobów. Twoja struktura folderów powinna wyglądać mniej więcej tak.

  • folderze projektu
    • build
    • dist
    • lib
    • nbproject
    • zasoby
    • src

Przejdź do właściwości swojego projektu. Możesz to zrobić, klikając prawym przyciskiem myszy swój projekt w oknie zakładki Projekty i wybierając Właściwości z menu rozwijanego.

W kategorii po lewej stronie wybierz Źródła.

W folderze źródłowym Foldery po prawej stronie dodaj folder zasobów za pomocą przycisku Dodaj folder. Po kliknięciu przycisku OK powinien pojawić się folder Zasoby w projekcie.

enter image description here

Teraz powinno być w stanie wyciągnąć zasobów przy użyciu tej linii lub podobne podejście:

MyClass.class.getResource("/main.jpg"); 

Jeśli było utworzyć pakiet o nazwie Obrazy w folderze zasobów, można odzyskać zasobu tak:

MyClass.class.getResource("/Images/main.jpg"); 
+1

i użyłem tej metody, ale znalazłem niepokojący efekt. po budowaniu netbeans ładuje wszystkie zasoby wewnątrz słoika i naprawdę chcę, aby zasoby pozostały poza słojem! więc istnieje obejście tego problemu? –

+0

Niestety, metoda zasobów Java może nie być dokładnie tym, czego szukasz. Jeśli jednak twoje pliki znajdują się w ścieżce klas, możesz użyć ClassLoader.getSystemResource ("somefile.txt") ... nie będziesz już chciał dołączać folderu zasobów, jak podano powyżej. Inną opcją byłoby przejrzenie katalogu nadrzędnego słoika (lub ścieżki statycznej) dla danego pliku (zasobu) i otwarcie ich przy użyciu pliku lub innego równoważnego do swoich potrzeb. Jeśli plik nie istnieje, utwórz go z zasobów przechowywanych w słoiku. W tym przypadku będą bardziej podobne do szablonów. –

Powiązane problemy