2012-12-24 17 views
5

Próbuję wykonać podstawowy aplet Javy, aby otworzyć plik na komputerze klienta. Chciałbym wywołać funkcję openFile w aplecie java poniżej za pośrednictwem javascript.Jak wywołać metodę zadeklarowaną w aplecie z 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(); 
     } 
    } 
} 

W między tagami mojej stronie mam następujący:

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

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

Kiedy załadować stronę otrzymuję błąd:

TypeError: Object # has no method 'openFile'

Czy ktoś wie, co trzeba zrobić, aby naprawić ten błąd i uruchomić aplet?

+0

Aplet będzie komponent w systemie kontroli wersji. Oddzielna usługa sieciowa kopiuje plik na komputer klienta podczas "sprawdzania" kodu, ale chcę go automatycznie otworzyć w domyślnym edytorze tekstu. Jeśli możesz wymyślić prostszy sposób na otworzenie pliku tekstowego, jestem tylko uszy. – Daniel

Odpowiedz

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> 

referencyjny: Invoking Applet Methods From JavaScript

Aktualizacja

JavaScript może wywołać bezpośrednio apletu metody publiczne lub zmienne publiczne. JavaScript uważa osadzony aplet jako obiekt. Poprzez przekazanie aplet z identyfikatorem, JavaScript może uzyskać do niego dostęp z

document.Applet_ID.Applet_Method() 

i można to wykorzystać,

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

Jak jeden z nich jest bardziej czytelny niż "getElementById"? – Ian

+2

A od kiedy można zrobić "document.Applet_ID"? – Ian

+0

@ Daniel Teraz przejrzyj moją aktualizację – Ravi

Powiązane problemy