Exportieren aus Eclipse (applet/html)

qu1et

Grünschnabel
Hallo,

Habe ein erstes Applet in eclipse geschrieben, und würde dieses gerne in ein Html.dokument einbinden. Projektstruktur ist schon etwas komplexer (5 packages und insgesamt 34 classes/j.java's.). Im root des Projektfolders liegt noch ein .gif, welches als Hintergrund dient. Habe eine main.java und noch nicht allzuviel Ahnung wie man merkt :]
Wie kann ich dieses Setup/Projekt zu einem funktionierenden .jar o.ä. machen und was muß ich beachten? Sind Bilder im root der Projektfolders ein Problem? Muß ich eingebundene Bilder mit der .jar&.html uploaden?

Habe im Vorfeld mit Rechtsklick auf den Projektordner ein .jar exportiert und dieses mit folgendem code
Code:
    <applet code="name" archive="name.jar" width=800 height=500></applet>
in eine .html eingebunden. Das Applet wurde mit grauem Hintergrund und einem roten "X" in der linken oberen Ecke angezeigt (autsch).

würde mich über Hilfe, oder nützliche Links/Tuts sehr freuen. Danke im voraus.
 
Also im einfachsten Fall kannst Du die Applet-Class-Datei selektieren, über das Kontextmenü kopieren und im Dateimanager im richtigen Verzeichnis (Package = verschachtelte Verzeichnisse, wobei jeder Punkt ein neues Verzeichnis einläutet) einfügst.

Deiner HTML-Seite müßtest Du als codebase-Parameter noch das Package mitteilen, dann dürfte es funktionieren. ;-)
 
gesagt - getan.

Resultat: Applet wird nicht geladen - Fehler.

Javaconsole meint dazu:
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.misc)

at java.security.AccessControlContext.checkPermission(Unknown Source)

at java.security.AccessController.checkPermission(Unknown Source)

at java.lang.SecurityManager.checkPermission(Unknown Source)

at java.lang.SecurityManager.checkPackageAccess(Unknown Source)

at sun.applet.AppletSecurity.checkPackageAccess(Unknown Source)

at sun.applet.AppletClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClassInternal(Unknown Source)

at net.qu1et.raster_noton.util.HiResTimer.<init>(HiResTimer.java:17)

at net.qu1et.raster_noton.util.FPSCounter.<init>(FPSCounter.java:40)

at net.qu1et.raster_noton.Graphics2DApplet.start(Graphics2DApplet.java:74)

at sun.applet.AppletPanel.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Habe also erstmal nen kleinen überblick, über Quelle und Ursprung des Übels. :)

Folgende Fehlermeldungen

at net.qu1et.raster_noton.util.HiResTimer.<init>(HiResTimer.java:17)

at net.qu1et.raster_noton.util.FPSCounter.<init>(FPSCounter.java:40)

at net.qu1et.raster_noton.Graphics2DApplet.start(Graphics2DApplet.java:74)


kann ich ja zuordnen, aber den Rest ... OjeOje
 
...sieht glatt danach aus, daß Du was tust, was Du garnicht darfst (= access denied, also: Zugriff verwehrt). :p

Greift Du event. auf lokale Resourcen (schreibend) zu?
 
einzig verwendete lokale Ressource ist ein .gif, welches als Hintergrund dient. Dieses liegt im root des project.folders - sollte das eher in einen images-folder, oder kann man dies vernachlässigen?

Lese also aus. Schreiben dürfte da 'eigentlich' nichts - jedenfalls nicht soweit ich mich erinnern kann :)
 
Zuletzt bearbeitet:
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.misc)

Scheint, als ob Du mit einer Klasse in "sun.misc" arbeitest, die Du aber nicht mit kopiert hast. Danach kommt ja immer "...unbekannte Quelle" als Fehler.
Wofür brauchst Du Klassen aus diesem Verzeichnis, das wohl eher nicht zu den Java-Standard-Klassen gehört.

Bild laden:
Code:
Image img = Toolkit.getDefaultToolkit().getImage("../bilder/vogel.gif");
 
Vielen Dank erst einmal für Geduld und Mühe.

Habe alle Fehler bereinigen können, bis auf mein kleines Background.image-problem.

Hier mal der Code (habe der Übersichtlichkeit halber mal auf Mediatracking und anderen Krimskrams verzichtet):

Background.java

Code:
  package net.qu1et.blub;
  
  import java.awt.Color;
  import java.awt.Graphics2D;
  import java.awt.Image;
  
  public class Background extends java.applet.Applet {
  
  	private Graphics2D g2;
     
  	private Image img;
  	   
  	public Background (Graphics2D g2) {
  		this.g2 = g2;	  
  	   
  		img = getToolkit().getImage("back150px.gif");	 
  	}
     
  	public void loop() {	   
  	}   
     
  	public void draw() {	   
  	   
  		g2.drawImage(img, 650, 0, this);
  
  		g2.setColor(Color.gray);	   
  		g2.drawString("v.0.05" , 746, 22);	   
  	}
  }

Rufe die Background.java wie folgt innerhalb meiner Main.java auf:

Main.java

Code:
  package net.qu1et.blub;
  
  import java.awt.Color;
  import java.awt.Graphics2D;
  import java.awt.Image;
  
  public class Background extends java.applet.Applet {
  
  	private Graphics2D g2;
     
  	private Image img;
  	   
  	public Background (Graphics2D g2) {
 		this.g2 = g2;			 
  		img = getToolkit().getImage("back150px.gif");	 
  	}
     
  	public void loop() {	   
  	}   
     
  	public void draw() {	   
  	   
  		g2.drawImage(img, 650, 0, this);
  
  		g2.setColor(Color.gray);	   
  		g2.drawString("v.0.05" , 746, 22);	   
  	}
  }

Aus Eclipse heraus läßt sich das Applet problemlos starten (Bild wird geladen und angezeigt), sobald ich das Applet aber von meinem Html-dokument aus aufrufe, erhalte ich via Konsole folgenden Schadensbericht:

java.security.AccessControlException: access denied (java.io.FilePermission back150px.gif read)

at java.security.AccessControlContext.checkPermission(Unknown Source)

at java.security.AccessController.checkPermission(Unknown Source)

at java.lang.SecurityManager.checkPermission(Unknown Source)

at java.lang.SecurityManager.checkRead(Unknown Source)

at sun.awt.SunToolkit.getImageFromHash(Unknown Source)

at sun.awt.SunToolkit.getImage(Unknown Source)

at net.qu1et.raster_noton.Background.<init>(Background.java:16)

at net.qu1et.raster_noton.Main.setup(Main.java:16)

at net.qu1et.raster_noton.Graphics2DApplet.start(Graphics2DApplet.java:82)

at sun.applet.AppletPanel.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Whats wrong? (Ohne die Background.java - funktionierts!)
 
So, endlich geschafft. Habe eine einigermaßen elegante Lösung gefunden, welche endlich auch im Browser fuktioniert.

Hier mal der Code. Vielleicht ist er ja mal jemandem von Nutzen.

Code:
  import java.awt.Color;
  import java.awt.Graphics2D;
  import java.awt.Image;
  import java.awt.MediaTracker;
  import java.awt.Toolkit;
  import java.io.BufferedInputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.net.URL;
  import java.net.URLConnection;
  
  public class Background extends java.applet.Applet {
  
  	private Graphics2D g2;
  	
  	private Image img;
  		
  	public Background (Graphics2D g2) {
  		this.g2 = g2;		
  		loadImages();
  	}
  	
  	public void loadImages() {
  
  	   try {
 			img = gimmeImage(getClass().getResource("back150px.gif"), true);
  		}
  		catch (IOException ex) {
  			System.err.println("image not found");
  		}
  
  		MediaTracker mt = new MediaTracker(this);
  		mt.addImage(img, 0);
  		try {
  			//wait until Image is loaded completely 
  			mt.waitForAll();
  		}
  		catch (InterruptedException e) {
  			//nothing
  		}
  	}
  
  	private final Image gimmeImage(URL url, boolean flag) throws IOException {
  		Toolkit toolkit;
  		toolkit = Toolkit.getDefaultToolkit();
  		Object obj = null;
  		URLConnection urlconnection;
  		urlconnection = url.openConnection();
  		urlconnection.setUseCaches(false);
  		urlconnection.connect();
  		if (flag) {
  			urlconnection = null;
  			return toolkit.getImage(url);
  		}
  		BufferedInputStream bufferedinputstream;
  		ByteArrayOutputStream bytearrayoutputstream;
  		InputStream inputstream = urlconnection.getInputStream();
  		bufferedinputstream = new BufferedInputStream(inputstream);
  		bytearrayoutputstream = new ByteArrayOutputStream();
  		try {
  			for (int i = bufferedinputstream.read(); i != -1;
 				 i = bufferedinputstream.read()) {
  				bytearrayoutputstream.write(i);
  			}
  		}
  		catch (IOException ioexception) {
  			return null;
  		}
  		bufferedinputstream.close();
  		return toolkit.createImage(bytearrayoutputstream.toByteArray());
  	}
  	
  	public void loop() {		
  	}	
  	
  	public void draw() {		
  		if (img != null) {
  			g2.drawImage(img, 650, 0, this);
  		}
    	}
  }

Danke schnuffie. :)
 
Zurück