hey :-) od kilku dni zapragnelam napisac aplikacje w javie....a wczesniej programowalam sporo w C++...wiec nie bylo wiekszych problemow..poza jednym wlasnie:
mam pliczek Warcaby.class i towarzyszace mu pliki klas skladowych (wewnetrznych) Warcaby$* ... ble ble, oraz pliki obrazkow *.jpg ktore uzywam w klasie Warcaby.class
... wszystko jest oki .... ale mam problem z archiwum jar.... kiedy utworze sobie wlasny pliczek manifest.txt , w ktorym mam Main-Class: Warcaby + nowa linia i wolam jara w postaci:
jar cvfm Warcaby.jar manifest.txt *.class *.jpg ---> wszystko jest oki.
Problem w tym ze kiedy wolam : java -jar Warcaby.jar odpala mi sie programik ...ale nie widzi obrazkow !!!, natomiast jesli recznie skopiuje te pliki do sciezki gdzie siedzi Warcaby.jar wszystko jest OKI :-)
Mam pytanko czy w pliku manifest.mf jest jakis zonk? , czy trzeba uzyc jakies skladni aby zamanifestowac obecnosc plikow z obrazkami, tekstem, dzwiekiem itp? tak jak robi sie to z klasa Warcaby??? i jesli tak to jak? bo w dokumentacji nie znalazlam odp. tipsu :-)
PROSZE niech mi ktos pomoze !!!!
ps. chce koniecznie przesiąść się z Buildera na Jave....
fanom gier planszowych polecam moj programik edukacyjny WarcaboweABC ...do pobrania z
http://warcaby64.republika.pl
0
0
bylo juz gdzies na forum... MojaKlasa.class.getResourceAsStream (jakos tak)
pozdrawiam
0
Napisałem kiedyś taką klasę do czytania obrazków z plików jar (zip), może Ci się przyda
/* Uniwersalna klasa odczytująca zasoby programu z pliku jar(zip)
* Obecna wersja posiada dwie metody static:
* dwuargumentowa metoda ImageIcon readIcon(String nazwa_pliku_jar,String nazwa_pliku_graficznego)
* trójargumentowa metoda ImageIcon readIcon(String nazwa_pliku_jar,String nazwa_pliku_graficznego,boolean czy_odczytac_ikone_z_pliku_gif)
*/
import javax.swing.*;
import java.util.jar.*;
import java.util.zip.*;
import java.io.*;
public class ReadFromJar
{
public static ImageIcon readIcon(String nameOfFile,String nameOfPicture,boolean seekFile)
{
ImageIcon ikona=null;
try
{
JarFile jf=new JarFile(nameOfFile);
ZipEntry ze=jf.getEntry(nameOfPicture);
InputStream is=jf.getInputStream(ze);
byte[] bufor=new byte[(int) ze.getSize()];
is.read(bufor);
is.close();
ikona=new ImageIcon(bufor);
}
catch (IOException e)
{
if (seekFile)
{
ikona=new ImageIcon(nameOfPicture);
}
}
return ikona;
}
//------------------------
public static ImageIcon readIcon(String nameOfFile,String nameOfPicture)
{
return readIcon(nameOfFile,nameOfPicture,false);
}
}
pozdrawiam
0
problem rozwiązany :-)
caly knyft polagał na tym że archiwum jar w trakcie odpalania java -jar Plik.jar...jest rozpakowywany w locie i zamiast bezposredniego odwolania do nazwy pliku plik.jpg (ktore dziala przy zwyklym wolaniu java plik)...trzeba uzyskac dostęp do zasobów, czyli upraszaczając nalezy w pliku zrodlowym zamienic wszystkie bezposrednie odwolania do plikow z obrazkami na odpowiadającą im funkcje getResource obiektu ClassLoader.
czyli:
- tworzymy np w konstruktorze obiekt typu ClassLoader:
ClassLoader cl=this.getClass().getClassLoader(); - w miejscach gdzie pobieramy obrazki (funkcja getImage) zamiast np. ciągu getImage("obrazek.jpg") wpisujemy:
getImage(cl.getResource("obrazek.jpg"))
i dalej juz wszystko jest OKEY !
...moze komus się to jeszcze przyda :-)
...