program nie wyświetla obrazków pod linuxem

0
ImageIcon buttonimage1 = new ImageIcon("images/obrazek1.jpg"); 

w ten sposób ładuje obrazek
pod Windowsem wszystko działa jak należy, ale uruchomieniu aplikacji na linuxie nie widać obrazków
co należy zmienić ?

0

Sprawdź wielkość liter w nazwie pliku.

0

wielkość liter się zgadza

0

Na windowsie uruchamiałeś w jakimś IDE, czy w konsoli? Jeżeli w IDE, to czy miałeś osobne katalogi na źródła i klasy, czy jeden wspólny?

0

Na windowsie używam Netbeansa. Teraz zauważyłem że obrazki wyświetlają się tylko jak w netbeansie klikam 'run project' albo uruchamiam mój projekt poprzez plik jar.
Jak chcę uruchomić w windowsie poprzez konsolę to też nie ma obrazków ...

W netbeansie mam wszystko domyślnie, czyli klasy w ...\NetBeansProjects\Projekt1\build\classes\package
a obrazki ...\NetBeansProjects\Projekt1\dist\images\ (do uruchamiania pliku jar) oraz ...\NetBeansProjects\Projekt1\images (do uruchamiania poprzez 'Run project')

0

"images/obrazek1.jpg" jest adresem względnym (w stosunku do katalogu bieżącego). Katalog bieżący jest inny przy uruchamianiu z IDE, inny przy uruchamianiu z konsoli.
Spróbuj tak:

new ImageIcon(TwojaKlasaStartowa.class.getResource("images/obrazek1.jpg"))
0

wyskakują błędy przy kompilacji:

 Exception in thread "main" java.lang.NullPointerException
	at javax.swing.ImageIcon.<init>(ImageIcon.java:167)
	at Projekt1. Buttons.readminiimage1(Buttons.java:16)
	at Projekt1.GUIclass.<init>(PuzzleGUI.java:46)
	at Projekt1.Main.main(Main.java:13)
0

nikt nie wie jak poprawnie wstawić obrazki aby pod konsola również się wczytywały ?

0

Wepchnąc je do jara razem ze wszystkimi klasami? :)

0

Pomysł niezły. Próbuję (na razie bezskutecznie) ulokować obrazki względem klas i podać ich adresy tak by były widziane w trzech sytuacjach:

  • uruchamianie z IDE (u mnie Eclipse),
  • uruchamianie z konsoli bez tworzenia jara,
  • uruchamianie z jara.
0
Shalom napisał(a)

Wepchnąc je do jara razem ze wszystkimi klasami? :)

użytkownik ma mieć możliwość samodzielnej zmiany plików graficznych, w tym wypadku zdjęć ;)

0
bogdans napisał(a)

Pomysł niezły. Próbuję (na razie bezskutecznie) ulokować obrazki względem klas i podać ich adresy tak by były widziane w trzech sytuacjach:

  • uruchamianie z IDE (u mnie Eclipse),
  • uruchamianie z konsoli bez tworzenia jara,
  • uruchamianie z jara.

Przeciez to banal. Zasoby musza byc w classpath, wiec wrzucasz np. do src/images. Teraz jakakolwiek klasa moze getClass().getResource("/images/dupa.png") - ten slash na poczatku jest bardzo wazny. I tyle.

0
tom napisał(a)
Shalom napisał(a)

Wepchnąc je do jara razem ze wszystkimi klasami? :)

użytkownik ma mieć możliwość samodzielnej zmiany plików graficznych, w tym wypadku zdjęć ;)

Banal - wczytywac obrazki z classpath (patrz wyzej jaki to ma sens - wszystkie 3 podejscia dzialaja), i podawac classpath przy startowaniu jara. Sposob brania zasobow ten sam - getclass().getResource....
Masz w projekcie katalog images (nie w katalogu ze zrodlami), i w IDE konfigurujesz ze ten katalog nalezy do classpath - tak dziala w IDE.
Jar lub katalogi z linii polecen - -cp '.;images' - i juz masz zasoby w classpath i mozna wczytywac jak podano wyzej.
Jar z atrybutem Class-Path: images - dokladnie to samo, katalog nalezy do cp.
Do tego user widzi katalog, i moze podmienic w nim obrazki.

0
 
String path = ChooseForm.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String decoded = URLDecoder.decode(path, "UTF-8");
        File fileOuttemp = new File(decoded);
        File cwd = fileOuttemp.getParentFile();

        String sciezkadojara = cwd.getCanonicalPath();

Zwraca folder z którego uruchamiany jest jar. Wystarczy teraz dokleić do tej ścieżki folder images i powinno być ok.

0

@bogdans - a probowales? Przeciez ten slash wlasnie jest po to aby szukanie bylo od poczatku sciezki, od roota. Ogarnij sie.

0

Próbowałem, ze slashem nie działa zupełnie. Bez slasha działa we wszystkich przypadkach, gdy katalog images jest obok klasy. Kłopoty są gdy ten katalog jest wyżej. W IDE i w konsoli bez jara działa np. "../images/obrazek.jpg", ale jak obrazki są jeszcze poziom wyżej, to "../../images/obrazek.jpg" już nie działa.

0

Czlowieku, jakie ../../, przeciez to sa zasoby w classpath. Ok, tutaj masz plik: http://www.file-upload.net/download-3983243/BogdansTest.zip.html. To jest projekt eclipsowy. Jako ze nie jestes zbyt dobry w te klocki, poprowadze za raczke:

  1. z poziomu eclipse - importujesz projekt, uruchamiasz klase test.Main i w konsoli wypisze ci URL zasobu pobranego za pomoca getClass().getResource("/images/dupa.jpg")
  2. linia polecen, bez jara: cd $WORKSPACE/BogdansTest/bin; java test.Main - wypisuje ci ten sam URL
  3. linia polecen, jar: cd $WORKSPACE/BogdansTest/bin; java -jar test.jar - wupisuje ci URL tego pliku, przy czym tym razem uzywany protokol jar:file (co nie zmienia faktu, ze da sie utworzyc InputStream i utworzyc ImageIcon z obrazkiem +++dla wszystkich przypadkow+++).
    Pewnie nie umiesz utworzyc jara, oto magiczna inkantacja:
    cd $WORKSPACE/BogdansTest/bin; jar cfe test.jar 'test.Main' *

Jak sie nie wie co to classpath i jak dziala to faktycznie, mozna sie pogubic i tworzyc cuda z ../../ i innymi...

0

Umiesz czytać?
Próbowałem, ze slashem nie działa zupełnie.

0

Co znaczy nie dziala zupelnie? Podales 3 przypadki jakie chcesz osiagnac, dziala dla kazdego. Czego jeszcze Pan sobie zyczy? Ty najwidoczniej nie wiesz co to classpath i jak to dziala.

Wez sciagnij ten pakiet, i sie pobaw - troche sie nauczysz.

0

Thx, świat jest pełen tajemnic.
Poniższy kod

    	try
    	{
    		URL url=this.getClass().getResource("/images/Home.gif");
    		System.out.println(url);
     	        add(new JButton(new ImageIcon(url)));
    	}
    	catch(NullPointerException e)
     	{
    		add(new JButton("Dupa"));
    	}

przez ostatnie dwie godziny wyświetlał null na konsoli i umieszczał przycisk z napisem "Dupa" we framie. Parę minut temu (bez żadnego przemieszczania katalogu "images" zaczął działać poprawnie.

0

Odpowiedz jest prosta - pewnie nie odswiezyles projektu eclipsowego po skopiowaniu pliku z obrazkiem. To jest standardzik, juz wiele razy dalo mi sie we znaki, dlatego robie to juz odruchowo ;d
Pozdro.

0

Odpowiedź jednak nie jest prosta. Dzisiaj znowu nie działało ze slashem. Odświeżenie projektu spowodowało usunięcie całej zawartości katalogu bin (podkatalogi, obrazki i klasy). Usuwanie projektu (oraz obiektów .cośTam) i tworzenie nowego na podstawie istniejących źródeł nie pomagało. Pomogło dopiero utworzenie nowego pustego projektu, nowych pakietów, nowych klas i przerzucenie przez schowek dawnych źródeł do nowego projektu.

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