2009-06-08 3 views
0
Wrapper

übergeben Ich habe die folgende Methode in meinem Applet:in IE Abrufen der Länge eines Java-Array von einem Applet auf seine Javascript

public File[] getFiles() 

Was ich von Javascript rufen Sie wie folgt vor:

var files = applet.getFiles(); 

for (var i = 0; i < files.length; i++) { 
    // Do something. 
} 

Das funktioniert in Firefox, aber IE gibt mir

'length' is null or not an object 

Irgendwelche Ideen jemand?

+0

nichts über Java wissen, kann ich nur fragen, ob Sie versucht haben, „für (i in Dateien) {/ * Mach was * /} " – annakata

+0

Meinst du nicht Datei [] (nicht Files [])? Anderenfalls würde es helfen, wenn Sie (Dateien) alarmieren. Auch, wenn Sie einen Javascript-Debugger (DebugBar, zum Beispiel) haben, der am meisten helfen würde. – laginimaineb

+0

@annakata: Ja, ich habe es versucht. Es funktioniert weder in Firefox noch in IE. @laginimaineb: Korrigierte Frage. Vielen Dank! Außerdem hilft Alert (Dateien) nicht viel, aber ich werde versuchen, den untenstehenden Vorschlag von kizzx2 in die Struktur der Dateien zu schauen. –

Antwort

0

Behelfslösung gefunden. Anstatt ein Array zurückzugeben, geben Sie stattdessen eine Liste zurück. Dann durchlaufen Sie es mit den Methoden get und size. Funktioniert sowohl in IE als auch in Firefox.

So sollte das Applet Methode:

public List<File> getFiles() 

Und Javascript-Seite zu verwenden:

var files = applet.getFiles(); 
for (var i = 0; i < files.size(); i++) { 
    // Do something with files.get(i). 
} 
+0

Sollte überprüft haben https://developer.mozilla.org/en/LiveConnect zuerst. Klar gesagt, dass Arrays in einer bestimmten LiveConnect-Version zweifelhaft sind. –

0

Sie können Firebug Lite in IE verwenden, um zu untersuchen, was mit files

Zuerst ist los, umfassen Firebug Lite in der Datei

<script type='text/javascript' 
    src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script> 

es nun in der Konsole anmelden mit

var files = applet.getFiles(); 
console.log(files); 
for (var i = 0; i < files.length; i++) //... 

Jetzt können Sie untersuchen, welches Objekt tatsächlich von getFiles()

zurückgegeben wurde

Ich gebe diesen Vorschlag, weil IE sagte length ist null nicht oder kein Objekt statt files null ist oder kein Objekt, vielleicht files haben andere Methoden, die Sie verwenden können. Verwenden Sie Firebug, um diese zu reflektieren.

0

Nicht sicher, wie weit die Weitergabe eines Java-Arrays an Javascript unterstützt wird. Eine Abhilfe ist das Array als eine getrennte Zeichenfolge zurückzukehren, wie in dem folgenden Beispiel gezeigt

http://www.rgagnon.com/javadetails/java-0183.html

+0

Bereits diesen Link gesehen. Ansatz ist nicht praktikabel, da getFiles ein Array von Nicht-String-Objekten zurückgibt. –

+0

Ich merke, dass Sie die Zeichenfolge aus den String-Attributen erstellen, die für das File-Array erforderlich sind, z. der Dateipfad Sie können dann die erforderlichen Details aus der Datei mit diesem Pfad erhalten – objects

Verwandte Themen