Applet kann in Browser nicht ausgeführt werden

Mr Hankey

Mitglied
Hallo,

Java:
import java.applet.AudioClip;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;

public class Test extends JApplet
{


    private JLabel labell,labelr,labelc;
	private ImageIcon i1,i2,i3;
	private boolean active = true;
	private AudioClip sound;
	private FlowLayout layout = new FlowLayout();

    public Test()
    {
    	
        JPanel contentPane = (JPanel)this.getContentPane();
        contentPane.setLayout(layout);
    	sound = JApplet.newAudioClip(getClass().getResource("sound.au"));
    	labelc = new JLabel("text");
        
    	addKeyListener(new KeyListener() {

    		public void keyPressed(KeyEvent e) {
    			if (e.getKeyChar() == 'l' && active == true) {
    				labell.setIcon(i1);
    				active = false;
    				sound.play();


    			}
    			
    			if (e.getKeyChar() == 'a' && active == true) {
    				labelr.setIcon(i2);
    				active = false;
    				sound.play();

    			}
    			
    			if (e.getKeyChar() == 'b') {
    				labell.setIcon(i3);
    				labelr.setIcon(i3);
    				active = true;
    			}
    			labell.repaint();
    			labelr.repaint();
    			
    		}

    		public void keyReleased(KeyEvent e) {
    			
    		}

    		public void keyTyped(KeyEvent e) {
    			
    		}
    		
    	});
    	
        
    	i1 = new ImageIcon("b1.jpg");
    	i2 = new ImageIcon("b2.jpg");
    	i3 = new ImageIcon("b3.jpg");
    	
    	labell = new JLabel("TEXT");
    	labelr = new JLabel();
    	labell.setIcon(i1);
    	labelr.setIcon(i2);
    	labelc.setFont(new Font("Arial", Font.BOLD, 20));
    	labelc.setSize(300,50);
    	
    	layout.setHgap(30);

        add(labell);
        add(labelc);
        add(labelr);

    
    	}
}


Das lässt sich jetzt zwar im AppletViewer von Eclipse aufrufen, aber nicht im Browser. Firefox stürzt eigentlich direkt ab und bei IE kommt ein reservierter Bereich für das Applet aber darin ist nur ein rotes X. Ich will mit dem Applet nur einen Tastendruck mit dem Keylistener erfassen, es sollen Bilder auf labels geändert werden und es soll ein sound abgespielt werden.
Weiß jemand wo der Fehler liegt?

(Beim starten des AppletViewer wird ja eine html datei erstellt. Diese habe ich sogar kopiert und geöffnet, funktioniert so aber auch nicht)


Zusatz:
Habe jetzt diese html Datei vom AppletViewer in Firefox öffnen können. Es kam das rote x, habe es angeklickt und es öffnete sich ein Fenster mit Inhalt:

Java Plug-in 1.6.0_29
Verwendung der JRE-Version 1.6.0_29-b11 Java HotSpot(TM) Client VM
Home-Verzeichnis des Benutzers = C:\Users\Nutzername
----------------------------------------------------
c: Konsole löschen
f: Objekte in Finalisierungswarteschlange finalisieren
g: Speicherbereinigung
h: Diese Hilfemeldung anzeigen
l: ClassLoader-Liste ausgeben
m: Speicherbelegung anzeigen
o: Protokollierung auslösen
q: Konsole ausblenden
r: Richtlinien-Konfiguration neu laden
s: System- und Bereitstellungseigenschaften ausgeben
t: Threadliste ausgeben
v: Thread-Stack ausgeben
x: ClassLoader-Cache löschen
0-5: Trace-Stufe auf <n> setzen
----------------------------------------------------


java.lang.reflect.InvocationTargetException
at com.sun.deploy.util.DeployAWTUtil.invokeAndWait(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.runOnEDT(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission lichtblauan.jpg 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 javax.swing.ImageIcon.<init>(Unknown Source)
at javax.swing.ImageIcon.<init>(Unknown Source)
at Buzzer.<init>(Buzzer.java:69)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Ausnahme: java.lang.reflect.InvocationTargetException

Weiß da jemand was mit anzufangen?
 
Zuletzt bearbeitet:
java.lang.reflect.InvocationTargetException
at com.sun.deploy.util.DeployAWTUtil.invokeAndWait(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.runOnEDT(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission lichtblauan.jpg read)

Schau mal in die FAQ unter Java Applets, da findest du einige Infos, wie z.B. http://www.java-forum.org/applets/16717-applets-webstart-anwendungen-signieren.html
 
Ich möchte das Applet nur lokal öffnen, also nicht mit dem AppletViewer von Eclipse sondern in Firefox. Das mit der Signatur habe ich auf die schnelle nicht hinbekommen. Gibt es eine einfache Lösung nur um das Applet im Browser zu öffnen?
 
Bei dem geposteten Code handelt es sich nicht um ein Applet und auch nicht um den Original oder Beispielcode. Dein Applet versucht auf das "lokale" Filesystem zu zugreifen. Das ist bei einem nicht signierten Applet nicht möglich. wenn es nur um das Laden von Bildern geht, dann reicht es ja diese im Applet Kontext zur Verfügung zu stellen und daraus zu laden. Weiss grad nicht aus dem Kopf welches Vorgehen da am geeignetesten ist aber Bsp. sollten sich einige im Netz finden lassen.
 
Das stimmt. Zeilen wie
Java:
i1 = new ImageIcon("b1.jpg");
greifen auf die lokale Verzeichnisebene des Clients zu und benötigen die Zustimmung des Anwenders.
Signieren ist in diesem Fall absolut unnötig. Wie Michael... schon sagte, muss die Datei aus der Umgebung des Applets geladen werden. Die Datei muss sich also auf dem Server des Applets oder in der Jar-Datei des Applet befinden.
Beispiele dazu habe ich vor einiger Zeit mal hier zusammen getragen:
Grafikdateien laden und anzeigen ? Byte-Welt Wiki
 

Neue Themen


Zurück
Oben