Jar i dwa projekty

0

Witam, mam problem z utworzeniem pliku jar. Napisałem prostą grę która składa się z 2 projektów:
-Gra
-GraGui
Projekt GraGui ma dodany do buildpath projekt Gra.
Oprócz tego w projekcie GraGui znajduje się folder images w którym to znajduje się grafika gry.

Jak odpalam projekt GraGui w Eclipsie wszystko działa bez problemu, lecz chciałbym wyexportować grę do jara abym mógł odpalać ją poza ide. Robię to przy pomocy Eclipsa Export -> Jar File/Runable Jar File (żadne nie działa).

Pod odpaleniu utworzonego jara wyświetla się interfejs użytkownika gry, ale grafika nie jest wyświetlana(np tło ramki) i wygląda na to że nie widzi klas projektu Gra.

klasy projektu Gra znajdują się w pakiecie pl.b4rteq.gra
klasy projektu GraGui znajdują się w pakiecie pl.b4rteq.gra.gui

Dodam że wszystkie potrzebne pliki .class znajdują się w utworzonym jarze.

Bardzo proszę o poradę, w jaki sposób utworzyć jara aby wszystko się dobrze odpalało?

0

GraGUI.jar nie zawiera ani klas, ani obrazkow projektu Gra. Jednakze, powinien zawierac w manifescie wpis Class-Path: Gra.jar lub cos podobnego. Wtedy oba jary leza kolo siebie, i GraGUI.jar wie ze musi szukac klas w Gra.jar lezacej w tym samym katalogu.
Inne rozwiazanie to spakowac klasy z oby projektow do jegnego jara. Eclipsowy export chyba tego nie potrafi, jesli np. uzywasz mavena to masz maven-shade-plugin, maven-depedency-plugin i pewnie wiele innych.
Ososbiscie uwazam ze masz zle podzielone projekty. Gra.jar ma klasy gry, i korzysta z obrazkow w GraGUI.jar, ktory korzysta z klas w Gra.jar - masz cykl, a to nigdy nie jest dobre. Wyglada na to ze w tym wypadku albo powinienes miec 1 jar (jesli gra nie moze istniec bez GUI), lub wiecej niz 2 jary aby pozbyc sie cyklu.

0

Projekt Gra zawiera logikę gry, i nie odnosi się do żadnych zasobów projektu GraGui. Do grafik odnoszę się podając sieżkę np: "images/grafika.jpg" po spakowaniu do jara folder images znajduje się w folderze głównym jara. Pomyślałem, że może klasa szuka go w pl.b4rteq.game.gui, lecz po skopiowaniu go tam grafika i tak się nie wyświetla.

0

Pokaz jak wczytujesz te zasoby - podejrzewam ze Klasa.getClass().getResourceAsStream() albo podobnie, ale sa rozne formy i niektore wymagaja '/', niektore nie.

0

Do plik z grafiką odwołuje się w następujący sposób:
private final Image logo = new ImageIcon("images/logo.jpg").getImage();

natomiast jeżeli chce się odwołać do którejś z klas projektu Gra to najzwyczajniej w świecie dodaje importa.

0

I wszystko jasne, powiedzialby, ze klasyk - konstruktor ImageIcon(String) bierze sciezke do pliku, a w Twoim przypadku pewnie images znajduje sie w katalogu projekty eclipse. Eclipse jak uruchamia programy, to ustawia workind directory na katalog projektu, dlatego 'images/image.jpg' (czy cokolwiek) jest dobrze odczytywany.
Aby zadzialo Ci poza eclipse masz 2 wyjscia:

  1. latwe, ale brudne - skopiuj katalog images do katalogu gdzie sa jary Twojej aplikacji, i nastepnie uruchom gre z tego katalogu
  2. aby dzialalo i w eclipse, i normalnie, niezaleznie od katalogow itp, musisz te obrazki trzymac w classpath (np w jednym z jarow, tak jak to robisz), ale musisz uzywac innego konstruktora, np ImageIcon(URL). URL do obrazka dostaniesz uzywajac np. JakasKlasaZJara.class.getResource("/images/obrazek.jpg") (sa i inne sposoby, jak ClassLoader, ale ten uwazam za najlatwiejszy)
    • sa i inne sposoby, ale to juz kombinowanie pod gorke IMHO
0

Wielkie dzięki za zainteresowanie tematem, jutro jak będę miał chwilę czasu to sprawdzę to co napisałeś.

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