2012-12-24 13 views
5

Sto provando a creare un applet Java di base per aprire un file sul computer del client. Vorrei chiamare la funzione openFile nell'applet java in basso tramite javascript.Come chiamare il metodo dichiarato in applet da javascript

import java.awt.Desktop; 
import java.io.File; 
import java.io.IOException; 

import javax.swing.JApplet; 

public class Test extends JApplet { 
    public void openFile(String filePath) { 
     File f = new File(filePath); 

     try { 
      Desktop.getDesktop().open(f); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Tra i tag body della mia pagina web ho il seguente:

<applet code="Test.class" height="0" width="0"></applet> 

<script type="text/javascript"> 
    document.applets[0].openFile("C:\\test.log"); 
</script> 

Quando carico pagina ottengo l'errore:

TypeError: Object # has no method 'openFile'

Qualcuno sa che cosa ho bisogno fare per risolvere questo errore e far funzionare l'applet?

+0

L'applet sarà un componente in un sistema di controllo versione. Un servizio Web separato copia il file sul computer client quando esegue il codice "check-out", ma io voglio aprirlo automaticamente nel loro editor di testo predefinito allo stesso tempo. Se riesci a pensare a un modo più semplice per aprire il file di testo, sono tutto orecchie. – Daniel

risposta

6
<script src= 
    "http://www.java.com/js/deployJava.js"></script> 
<script> 
    <!-- applet id can be used to get a reference to 
    the applet object --> 
    var attributes = { id:'mathApplet', 
     code:'jstojava.MathApplet', width:1, height:1} ; 
    var parameters = {jnlp_href: 'math-applet.jnlp'} ; 
    deployJava.runApplet(attributes, parameters, '1.6'); 
</script> 

Riferimento: Invoking Applet Methods From JavaScript

Aggiornamento

Javascript è permesso di chiamare direttamente Applet di metodi pubblici o variabili pubbliche. Javascript considera l'applet incorporata come un oggetto. Fornendo l'applet con un ID, JavaScript può accedere con

document.Applet_ID.Applet_Method() 

ed è possibile utilizzare questo,

MyApplet.html

<html> 
<head> 
<script language="Javascript"> 
function accessAppletMethod() 
{ 
    document.getElementById("AppletABC").appendText("Applet Method"); 
} 
</script> 

<title>Testing</title></head> 
<body onload="accessAppletMethod()"> 

<h1>Javascript acess Applet method</h1> 
<applet width=300 height=100 id="AppletABC" 
code="JavaScriptToJava.class"> 
</applet> 

</body> 
</html> 

JavaScriptToJava.java

import java.applet.Applet; 
import java.awt.FlowLayout; 
import java.awt.TextArea; 

public class JavaScriptToJava extends Applet{ 

    TextArea textBox; 

    public void init(){ 
     setLayout(new FlowLayout()); 
     textBox = new TextArea(5,40); 
     add(textBox); 
    } 

    public void appendText(String text){ 
     textBox.append(text); 
    }  
} 
+2

In che modo uno di questi è più leggibile di 'getElementById'? – Ian

+2

E da quando puoi fare "document.Applet_ID'? – Ian

+0

@Daniel Ora, passa attraverso il mio aggiornamento – Ravi

Problemi correlati