Kommunikation Applet Javascript

Jungspund

Mitglied
Hallo ich habe ein Problem, und zwar kann ich meine Funktionen im Applet über Javascript nicht ansprechen.
Mache wahrscheinlich nur einen dummen Fehler und hab gerade ein Brett vorm Kopf und hoffe ihr könnt da kurz bei helfen :
und ja es ist signiert, falls wer am Ende darüber nachdenkt

HTML:
<!DOCTYPE HTML>

<HTML>
    <HEAD>
    <script type="text/javascript"> 
    window.onload = function() {
        alert("start");
        saveUnder();
        alert("done");
    }
    function saveUnder()  {
       document.jsap.test(); 
    }
    
    </script>
    <TITLE>
    </TITLE>
    </HEAD>
    <BODY>
    <object type="application/x-java-applet" width="400" height="600" id="jsap">
        <param name="archive" value="Speichern_Applet.jar"> </param>
        <param name="code" value="Speichern_Applet"> </param>
        <param name="mayscript" value="yes">
        <param name="scriptable" value="true"> 
    </object>  
    </BODY>
</HTML>

das Applet:
Java:
import java.awt.Container;

import javax.swing.JApplet;


public class Speichern_Applet extends JApplet{
    private static final long serialVersionUID = 1L;
    Speichern_Dialog dialog = new Speichern_Dialog();
    Container pane = this.getContentPane(); 
    public void init(){
        pane.add(dialog);
    }
    public String getPath() {
        return (String)dialog.saveFilesUnder();
    }
    public String test() {
    	return "Hallo :)";
    }
    public static void main(String[] args){
        new Speichern_Applet();
    }
}

Speichern_Dialog
Java:
import javax.swing.JFileChooser;
import javax.swing.JPanel;

public class Speichern_Dialog extends JPanel{
    private static final long serialVersionUID = -4573946667757611569L;
    JFileChooser filechooser = new JFileChooser();

    public Speichern_Dialog() {
        super();
        filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    }
    
    public Object saveFilesUnder() {
        int rueckgabeWert = filechooser.showDialog(this, "Speichern Unter");
        if(rueckgabeWert == JFileChooser.APPROVE_OPTION)
        {
            return ""+filechooser.getSelectedFile();
        }
        else 
            return null;
    }
    
    public static void main(String[] args) {
        Speichern_Dialog sp = new  Speichern_Dialog();
        System.out.print(sp.saveFilesUnder());
    }
}
 
Hi,

müsste der Zugriff auf das gewünschte Element nicht in der Form
Code:
document.getElementById('jsap').test();
erfolgen?

Ciao
Quaese
 
man kann es auch so machen, hab mittlerweile rausgefunden, das die bat zum signieren teilweise einfach mal keine Lust hat die App zu signieren und ich deswegen mittlerweile zu 90% access denied Exceptions bekomme...

Ich denke, dass das Applet mittlerweile signiert ist aber ich kriege immer noch folgende Fehlermeldung :
Java:
Exception in thread "AWT-EventQueue-2" java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir 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.checkPropertyAccess(Unknown Source)
	at java.lang.System.getProperty(Unknown Source)
	at java.io.Win32FileSystem.getUserPath(Unknown Source)
	at java.io.Win32FileSystem.resolve(Unknown Source)
	at java.io.File.getAbsolutePath(Unknown Source)
        //Und noch ein paar mehr Unknown Source Sachen

EDIT :
Das Applet funktioniert eigentlich, doch ich habe ein Problem, wenn ich die Dateien per Javascript aufrufen möchte ein Bsp :

wenn ich die getPath() Methode in den Konstruktor vom Applet reinziehe, gibt er mir keine Fehlermeldung aus und man kann auch den Pfad ausgeben lassen, somit funktioniert es ja soweit.... aber wenn ich nun die get Path Methode per Document.jsap.getPath() Methode anspreche, wird zwar das JFilechoose Fenster geöffnet, jedoch kann man den Pfad per String nicht wiedergeben lassen und ich erhalte folgenden Fehler in der JAVA Console:

Java:
Exception in thread "Basic L&F File Loading Thread" java.security.AccessControlException: access denied (java.io.FilePermission <dir> 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 java.io.File.exists(Unknown Source)
	at sun.awt.shell.ShellFolder.getShellFolder(Unknown Source)
	at javax.swing.filechooser.FileSystemView.getShellFolder(Unknown Source)
	at javax.swing.filechooser.FileSystemView.getFiles(Unknown Source)
	at javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run0(Unknown Source)
	at javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run(Unknown Source)

Hab es nun gelöst, das Problem liegt daran, dass Javascript einfach nichts von den Rechten des Applets weiß beim Methodenaufruf, diesem kann man entgegenwirken, indem man in der Methode, welche man Aufrufen möchte, noch einmal die Rechte des Applets abfragt hier ein Bsp:

Java:
@SuppressWarnings("unchecked")
	public String getPath() {
    	path = null;
    	AccessController.doPrivileged(new PrivilegedAction() {
			@Override
			public Object run() {
				path = (String)dialog.saveFilesUnder();
				return null;
			}
		});
    	return path;
        
    }
 
Zurück