Portal > Foren > Java > Desktop-Applikationen und Grafik > Applet - untrusted - Limitierungen ?
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 30.08.2004, 17:34 Nach oben    #1
terabaud
Gast
 
Beiträge: n/a
Standard Applet - untrusted - Limitierungen ?

Hi,

damit man als Benutzer Java-Applets ohne Sicherheitsbedenken ausführen kann, gelten Applets ja als "untrusted" Anwendung, d.h. Dateizugriffe aufs Filesystem werden aus Sicherheitsgründen unterbunden. Das ist auch gut so, dennoch hab ich mal eine Frage dazu : Kann ich externe Daten laden, die sich zum Beispiel innerhalb des JAR-Files befinden, oder ist dies nicht möglich ? Welche Limitierungen gibt es da ?

Ich erzähl mal was zu den Hintergründen

Ich arbeite zur Zeit an meinem ersten etwas größeren Projekt in Java : ein Remake eines alten Spieles vom Amstrad CPC 464/664/6128 : "Rebel Star" (rundenbasiertes Strategiespiel, Vorgänger von "Laser Squad").

Die Spritedaten sind in 2 externen Binärdateien gespeichert. Eine ".pal"-Datei für die Palette und eine ".img"-Datei für die eigentlichen Daten. Insgesamt sind es 128 Sprites, je 16x16 Pixel groß, 8 Bit/Pixel - bin mir aber noch nicht sicher ob ich mich strikt an die Originalgrafiken halte, dann könnte ich die Daten auf 2 Bit/Pixel reduzieren.

Komprimierung verwende ich erstmal keine, aber ich glaube auch nicht, dass es bei einer Datenmenge von 32 K (8 Bit), bzw. 8 K (2 Bit) soo viel ausmacht.

Ich programmiere das Ganze zur Zeit als StandAlone-Programm (ein Canvas in einem JFrame) - frage mich aber, ob ich, wenn ich es in ein Applet umbaue, die Möglichkeit habe, Dateien zu laden ?

Ich liste mal meine Laderoutine, vielleicht habt ihr ja noch einige Verbesserungsvorschläge. Ich bin, was Java angeht, noch ein Nasenbär, daher bin ich für jeden Senf offen

Code:
public class Sprites {

	Image[] img;
	IndexColorModel pal;
	
	// palette data
	
	byte[] red=null;
	byte[] green=null;
	byte[] blue=null;
	
	// sprite data
	
	char anz=0;
	char[] xanz=null;
	char[] yanz=null;
	int[] sz=null;
	byte[][] pixeldata=null;


// byteCombine setzt 2 Bytes zu einem 16-Bit Char zusammen, die Bytes werden
// als unsigned behandelt. Ich hab bis jetzt keine andere Möglichkeit gefunden,
// das zu implementieren. Vielleicht kennt ihr eine bessere Möglichkeit ?

public char byteCombine(byte lo,byte hi) 
{
		return (char)(
		((lo<0)?(256+lo):lo) + ((hi<0)?(256+hi):hi) * 256 );
}

// Dateiformat :
// in den ersten 2 Bytes steht die Sprite-Nummer des letzen Bildes (=Anzahl -1)
// in den nächsten (Anzahl * 2) Bytes stehen die Bildbreiten der einzelnen Sprites
// in den nächsten (Anzahl * 2) Bytes stehen die Bildhöhen der Sprites
// in den nächsten Bytes stehen die Pixeldaten

public boolean load(String filename)
	{
		int i;
		byte[] buffy; // all-purpose buffer
		Toolkit tk = Toolkit.getDefaultToolkit();
		try {
			FileInputStream f=new FileInputStream(filename);
			buffy=new byte[2];
			f.read(buffy,0,2);
			anz=(char)(1+byteCombine(buffy[0],buffy[1]));
			
			xanz=new char[anz];
			yanz=new char[anz];
			sz=new int[anz];
			img=new Image[anz];
			pixeldata=new byte[anz][];
			
			buffy=new byte[anz*2];
			
			f.read(buffy,0,2*anz);
			for (i=0;i<anz;i++)
				xanz[i]=byteCombine(buffy[i*2],buffy[i*2+1]);

			f.read(buffy,0,2*anz);
			for (i=0;i<anz;i++)
				yanz[i]=byteCombine(buffy[i*2],buffy[i*2+1]);
			
			for (i=0;i<anz;i++)
			{
				sz[i]=(int)xanz[i]*yanz[i];
				pixeldata[i]=new byte[sz[i]];
				f.read&#40:pixeldata[i],0,sz[i]);
	
				ImageProducer ip=new
						MemoryImageSource(xanz[i],yanz[i],pal,
								pixeldata[i],0,xanz[i]);
				img[i]=tk.createImage(ip);			
			}
			f.close();
		} catch (IOException e)
		{
			e.printStackTrace();
			return false;
		}
		return true;	
	}



public boolean loadPalette(String filename)
	{	
		red=new byte[256];
		green=new byte[256];
		blue=new byte[256];
		System.out.println("Loading palette : "+filename);
		try {
			FileInputStream f=new FileInputStream(filename);
			f.read(red,0,256);
			f.read(green,0,256);
			f.read(blue,0,256);
			f.close();
		} catch (IOException e)
		{
			e.printStackTrace();
			return false;
		}
		pal=new IndexColorModel(8,256,red,green,blue);
		return true;
	}

};

PS: Sicherlich hätte ich das ganze auch einfacher haben können, wenn ich zum Beispiel einfach .gif-Dateien genommen hätte, aber auf 128 GIF-Dateien hatte ich nicht so die Lust

An sich funktioniert die Routine aber schonmal, hier ein Screenshot... erinnert sich jemand an diese Grafik ?
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.08.2004, 09:21 Nach oben    #2
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Laden von Dateien aus dem eigenen Jar sollte eigentlich schon gehen. Ich glaub via den Classloader oder so.

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.09.2004, 19:25 Nach oben    #3
terabaud
Gast
 
Beiträge: n/a
Standard

Ah, hat sich erledigt. Ich kann zwar nicht ohne weiteres Daten aus dem eigenen Jar laden, aber es funktioniert, wenn ich die Grafiken einfach ins selbe Verzeichnis kopiere wie das Jar-File. Wenn das Applet auf einer Webseite ist, holt sich das Applet die Grafikfiles automatisch vom Webserver. Für mich als Neuling war das garnicht mal so selbstverständlich - aber probieren ging mal wieder über studieren
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Java Applet soll Daten an ein PHP Script senden flanger Allgemeine Java-Programmierung 5 16.05.2007 16:52
applet wird nicht angezeigt function Desktop-Applikationen und Grafik 4 31.10.2005 12:48
Policy Datei für Applet konfigurieren bobcho Desktop-Applikationen und Grafik 14 28.06.2005 21:59
Applet korrekt einbinden bicpi Allgemeine Java-Programmierung 1 15.01.2005 06:13
2 Applet miteinander kommunizieren mr.no Allgemeine Java-Programmierung 3 23.11.2004 20:47


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45