Stworzyłem pewien projekt w javafx i są w nim zdjęcia. W Eclipse wybieram standardowo Export i Runnable JAR File i następnie kończę proces exportu po czym otwieram poprzez podwójne kliknięcie utworzony plik i on oczywiście działa tak jak powinien - wszystko jest w jednym pliku JAR. Ale problem pojawia się kiedy... przenoszę ten plik w inne miejsce np. na pendrive-a lub do innej lokalizacji na dysku - wówczas okazuje się, że... program działa, ale zdjęcia się w nim nie pokazują. Nie spotkałem się nigdy z podobnym problemem i nie wiem co może być tego powodem - miał ktoś może podobny problem? Bardzo proszę o pomoc...
- 1
- 2
- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
Nie, zwykły JavaFx Project i inne projekty które robiłem tak samo kilka miesięcy temu mi działają cały czas (w sensie pliki Jar z tych plików)...
- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
Tak, są, sprawdzałem to i w tych co mi działały też były dlatego właśnie mnie to tak dziwi....

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
Klasyka :P "JAK" ładujesz te zdjecia? Przez get class resources? Zgaduje że nie. Że masz tam jakieś ścieżki "na pałe" a to tak nie zadziała. Czytanie plików z wnętrza jara wymaga odpowiedniego mechanizmu. Potrzebujesz czegoś w stylu
getClass().getResourceAsStream("/zdjecie.jpg");
- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
new Image(getClass().getResource("logo.png").toExternalForm())
Ale wcześniej też tak ładowałem i działało normalnie...

- Rejestracja:prawie 7 lat
- Ostatnio:około 12 godzin
- Lokalizacja:Kraków
- Postów:1999
A nie podajesz - mimo wszystko - ścieżek bezwzględnych od tych zdjęć tzn. ścieżki do JARa i dopiero od JAR-a dalszą ścieżkę do resource'ów (zdjęć) wewnątrz?
Sprawdź, czy gdzieś pod spodem nie ma czegoś takiego:
...
Caused by: java.io.FileNotFoundException: /app_path/application.jar!/BOOT-INF/classes!/images/image.png
- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
Nic się nie pojawia w konsoli jako błędy czy ostrzeżenia... Projekt normalnie startuje w Eclipse i jako Runnable Jar też tylko jak go przenoszę w inne miejsce to nie działają zdjęcia... I taki sposó działał w innych aplikacjach... Nie podawałem bezwzględnych ścieżek tylko właśnie względne żeby uniknąć tego że jak plik się usunie (otworzę Jara na innym komputerze gdzie nie będzie tych plików w bezwzględnych ścieżkach) to wtedy by na pwno nie zadziałało....

- Rejestracja:prawie 9 lat
- Ostatnio:5 miesięcy
- Lokalizacja:Futurama
- Postów:887
Jak odpalasz program w konsoli?
Czy używasz?:
java -jar NazwaTwojegoPlikuJar.jar
Jak wygląda struktura katalogów pakowanej aplikacji?
program działa, ale zdjęcia się w nim nie pokazują.
To co się pokazuje? Screen mile widziany
- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
Odpalam przez Ecpilsa, ale w konsoli w Eclipse nie pojawiają się żadne błędy...!
- screen.png (78 KB) - ściągnięć: 118

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
tylko jak go przenoszę w inne miejsce to nie działają zdjęcia
Czarów nie ma. Albo masz w kodzie klasyczne idotyczne
catch(Exception e){
//a na co mi to?
}
albo jednak w konsoli są wyjątki. Odpalasz ten program z konsoli przez java -jar
czy po prostu dwuklik? Bo po dwukliku nie ma konsoli a więc też logów na stdout
Odpalam przez Ecpilsa, ale w konsoli w Eclipse nie pojawiają się żadne błędy...!
No cieszymy sie, ale eclipse odpala z innymi scieżkami. Przenieś jara w inne miejsce i odpal go z konsoli łaskawie. Albo wrzuć to tego jara i zrobimy to za ciebie. Albo podlinkuj githuba. Niestety w innym wypadku muszę iść na strych po szklaną kulę.
- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
Nie mam pustych catchów, to jest bardzo prosty program... Odpalam przez dwuklik...

- Rejestracja:prawie 9 lat
- Ostatnio:5 miesięcy
- Lokalizacja:Futurama
- Postów:887
Aby otrzymać pomoc musisz odpowiadać na pytania.
Spróbuj przenieść swoją aplikację i uruchomić za pomocą konsoli/terminala używając wyżej wymienionej komendy, a nie przez Eclipse
Masz windowsa więc przejdź do folderu zawierającego twój plik jar
, otwórz menu i wybierz odpowiednią opcję uruchomienia konsoli.
Jeżeli możesz tylko PowerShell
to włącz go, wpisz cmd
i klepnij enter, a następnie komendę, o której wspomniałem wyżej.
Wrzuć tutaj wszystko co się pojawi (za pewne stack trace
błędów).
- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
Pojawia się coś takiego, a więc bez błędów i bez zdjęcia...
- screen-2.png (17 KB) - ściągnięć: 109

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
Dej tego jara bo do niczego nie dojdziemy
Ale jak znajdę pustego catcha to obiecuje że cię znajdę... :D

- Rejestracja:prawie 7 lat
- Ostatnio:około 12 godzin
- Lokalizacja:Kraków
- Postów:1999
Skoro nie używasz żadnego mavena/gradle tylko tak po prostu sklecasz runnable JARa w Eclipse, to jaką masz gwarancję, że Twoje obrazki w ogóle lądują w JARce? :P
- Otwórz ten Twój JAR wypluty przez Eclipse w jakimś WinRAR (tak, to jest zwykłe skompresowane archiwum, tylko nafaszerowane odpowiednimi plikami aby JRE mogło to archiwum wykonać) i spróbuj odnaleźć te pliki. Pewnie ich tam nie ma, jak już sugerował @Burdzi0 - nie sprawdziłeś tego, tylko kręcisz się w kółko i zarzekasz że się zrobiło i powinno działać i nie wiesz czemu nie działa, prawda? :P
- W międzyczasie zrób, o co proszą, i odpal z konsoli, a nie dwu-klikiem. Niby gdzie mają się printować ewentualne błędy, skoro nie robisz ani bloków try-catch które mogłyby np. otworzyć Ci error prompt z jakąś informacją o błędzie, ani nie możesz zobaczyć outputu ze stdout / stderr? :P
- spróbuj użyć jakichś cywilizowanych build tooli (gradle/maven) zamiast jakiegoś automagicznego exportera Eclipsa, którego pewnie nawet nie konfigurowałeś tylko odpaliłeś z defaulta ;) korzystając przy okazji z tutoriali/dokumentacji by ogarnąć, jak pakować nimi różne zasoby do JARa :P
- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
Nie można załączyć Jara więc przesyłam link...
https://drive.google.com/file/d/1peC4FJpkwnyORaMfVJ0K5ftq_csfk-AE/view?usp=sharing

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
U mnie działa. Ale robisz tam:
Image image = new Image(this.getClass().getResource("logo.png").toExternalForm());
i nie jestem do końca pewien takiej względnej ścieżki, może tu gdzieś leży problem na innej wersji javy
- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
No to ja już kompetnie nie wiem o co chodzi...
Kiedyś też robiłem takie jary i one mi teraz też działają a ten co zrobiłem teraz jak pokazywałem na screenach nie działa (zdjęcie w sensie) jak przeniosę na inny nośnik...

- Rejestracja:prawie 7 lat
- Ostatnio:około 12 godzin
- Lokalizacja:Kraków
- Postów:1999
marcin070707 napisał(a):
No to ja już kompetnie nie wiem o co chodzi...
Nie mówi się nie wiem o co chodzi
, tylko muszę sprawdzić dokładniej o co chodzi
:p
Weź sprawdź na przykład, z jakich wersji JDK i JRE korzysta Eclipse w Twojej konfiguracji, jakie wersje Javy masz w ogóle zainstalowane (gdzieś pod C:\Program Files\Java
lub czymś podobnym) - i sprawdź, jaka wersja JRE jest faktycznie używana do odpalenia JARa gdy otwierasz go spoza Eclipse.
I skoro masz tak silne opory przed odpalaniem swojego programu z konsoli, to weź chociaż dorzuć do programu (na potrzeby debugowania) AlertBoxa (czy jak to tam się w JavaFX nazywało, dawno nie używałem JavaFX) który wyrzuci Ci na ekran ścieżkę do pliku zwracaną przez ten Twój łańcuszek z getResource w roli głównej - i porównaj sobie co zwraca gdy odpalasz w Eclipse, z palca dwu-klikiem oraz rzeczywiste miejsce przesiadywania pliku. Łatwiej Ci będzie szukać błędu gdy będziesz widział, co Twój program próbuje robić pod spodem :p

- Rejestracja:około 6 lat
- Ostatnio:ponad 2 lata
- Postów:58
marcin070707 napisał(a):
No to ja już kompetnie nie wiem o co chodzi...
Kiedyś też robiłem takie jary i one mi teraz też działają a ten co zrobiłem teraz jak pokazywałem na screenach nie działa (zdjęcie w sensie) jak przeniosę na inny nośnik...
Sprawdź, czy nie masz jakichś bloków try-catch
, których mógłbyś się pozbyć, żeby aplikacja Ci się po prostu wywaliła z jakimś błędem - tj. nie obsługuj wyjątków, tylko jeśli coś się ma wywalić, niech tak się stanie.
Jeśli masz tam jakieś checked exceptions, których nie chcesz propagować - na chwilę opakuj je w jakiś RuntimeException
i rzuć ten wyjątek z bloku catch
.
Spakuj sobie takiego JARa i spróbuj zbadać zachowanie aplikacji.
Dodatkowo, jak pisał @superdurszlak, dodaj sobie jakieś komunikaty o tym, czy udało się znaleźć / otworzyć plik, jaka jest ścieżka (względna, bezwzględna) do tego pliku itd.
A może plik wczytuje się prawidłowo, tylko jest jakiś problem z renderowaniem?
Może wersja / konfiguracja Javy?

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
@superdurszlak @catom ale on wrzucił tego jara wyzej i on działa. Nie ma tam też żadnych catchy ;] Jedyne co przychodzi mi do głowy to inne handlowanie względnej ścieżki w jakiejś wersji javy.

- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
Wrzuciłem i screen z tym jak to wygląda u mnie po przeniesieniu na inny dysk i nie wiem jak to jest że u kogoś działa... Wrzuciłem też link do tego jara...
Mam:
- jdk-8u202-windows-x64
- jre-8u202-windows-x64
- Eclipse IDE for Enterprise Java Developers, Version: 2018-12 (4.10.0), Build id: 20181214-0600

- Rejestracja:około 6 lat
- Ostatnio:ponad 2 lata
- Postów:58
@Shalom @marcin070707
Widziałem tego JARa i odpaliłem u siebie bez problemu na JDK 8 Oracle'a.
Hmm... Nie wiem, może jednak tutaj z jakiegoś powodu aplikacja nie ma dostępu do System.err
i nie wypisuje stack trace wyjątku, który jest przechwytywany w metodzie application.Main.start()
?
- screenshot-20190301190229.png (74 KB) - ściągnięć: 66
- screenshot-20190301190408.png (23 KB) - ściągnięć: 67
- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
Przedziwna sytuacja - zrobiłem aplikację w jar, u mnie działa, ale jak przeniosę ją na inny dysk to nie działa, a ta sama aplikacja w tym samym pliku jar na innym komputerze (u osoby którą ją pobrała i odpaliła u siebie) też działa...

- Rejestracja:prawie 7 lat
- Ostatnio:około 12 godzin
- Lokalizacja:Kraków
- Postów:1999
marcin070707 napisał(a):
Przedziwna sytuacja - zrobiłem aplikację w jar, u mnie działa, ale jak przeniosę ją na inny dysk to nie działa, a ta sama aplikacja w tym samym pliku jar na innym komputerze (u osoby którą ją pobrała i odpaliła u siebie) też działa...
A teraz przenieś aplikację do ścieżki, która nie zawiera wykrzyknika :D
Aplikacja rzeczywiście działała, troszkę ją podrzeźbiłem by pokazywała ścieżkę, ale... Spójrz, co się stało, gdy utworzyłem sobie folder FOLDER!
i umieściłem w nim JARa:
Tak mnie jakoś naszło, jak zobaczyłem na jednym z Twoich zrzutów ten folder LUBIĘ TO!
, że może Javę przerosło opanowanie np. polskich znaków i zacząłem się bawić - a tu proszę, znaki specjalne są niby enkodowane kodowaniem procentowym, ale wykrzykników to to nie tyka... no i wykrzyknik nabruździł :)
To teraz spróbuj zastąpić ścieżkę bezwzględną ścieżką względną i zobacz, czy będzie śmigać :P
- screenshot-20190301201101.png (7 KB) - ściągnięć: 80
- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
Wygląda na to że faktycznie chodzi o to o czym napisałeś z tym wykrzyknikiem, bo jak przenoszę na ten sam dysk z folderem "LUBIĘ TO!" ale zmieniam nazwę na "LUBIE TO" to działa i u mnie :)
Tylko mam pytanie o co dokładniej chodzi z "To teraz spróbuj wywalić ścieżkę bezwzględną ścieżką względną i zobacz, czy będzie śmigać"?

- Rejestracja:prawie 7 lat
- Ostatnio:około 12 godzin
- Lokalizacja:Kraków
- Postów:1999
marcin070707 napisał(a):
Tylko mam pytanie o co dokładniej chodzi z "To teraz spróbuj wywalić ścieżkę bezwzględną ścieżką względną i zobacz, czy będzie śmigać"?
Problem nie jest, z tego co widzę, nowy :) Spójrz, zgłoszenie z 2002r, a tu zgłoszenie do OpenJDK z 2001
Chodzi o to, że ta ścieżka nie jest normalną ścieżką - spójrz na przedrostek jar:file:
przed ścieżką do pliku, oraz wykrzyknik po nazwie pliku JAR - wykrzyknik z grubsza oznacza miejsce, w którym kończy się "zwykła" ścieżka do pliku, a rozpoczyna ścieżka wewnątrz JARa (jak już wspomnieliśmy, JAR to tak naprawdę skompresowane archiwum), zatem ścieżka, która sama zawiera wykrzykniki, będzie robić dziada w trąbę :D
Gdyby udało się wymusić użycie wyłącznie ścieżki wewnątrz pliku JAR (czyli z pominięciem ścieżki do archiwum) ominąłbyś problem wykrzykników w ścieżce.
Spójrz jeszcze tu: https://www.geeksforgeeks.org/java-net-jarurlconnection-class-java/

- Rejestracja:prawie 7 lat
- Ostatnio:około 4 lata
- Postów:16
Rozumiem, ale nie ma w takim razie metody jak to ominąć że folder w którym jest plik kończy się znakiem "!"? Nie jest to może mega problem bo zwykle tak nie jest, ale jednak może się tak zdarzyć jak u mnie teraz...
- 1
- 2