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ć ?
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ć ?
Sprawdź wielkość liter w nazwie pliku.
wielkość liter się zgadza
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?
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')
"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"))
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)
nikt nie wie jak poprawnie wstawić obrazki aby pod konsola również się wczytywały ?
Wepchnąc je do jara razem ze wszystkimi klasami? :)
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:
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ęć ;)
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.
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.
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.
@bogdans - a probowales? Przeciez ten slash wlasnie jest po to aby szukanie bylo od poczatku sciezki, od roota. Ogarnij sie.
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.
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:
Jak sie nie wie co to classpath i jak dziala to faktycznie, mozna sie pogubic i tworzyc cuda z ../../ i innymi...
Umiesz czytać?
Próbowałem, ze slashem nie działa zupełnie.
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.
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.
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.
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.