2012-12-24 39 views
5

我正在試圖製作一個基本的Java Applet在客戶端的計算機上爲它們打開一個文件。我想通過javascript在java applet中調用openFile函數。如何從javascript中調用在applet中聲明的方法

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(); 
     } 
    } 
} 

在我的網頁的body標籤之間我有以下幾點:

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

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

當我加載的頁面出現錯誤:

TypeError: Object # has no method 'openFile'

有誰知道我需要什麼要解決這個錯誤並讓applet工作?

+0

該小程序將版本控制系統中的組件。一個單獨的Web服務在「檢出」代碼時將文件複製到客戶端計算機,但我想在其默認文本編輯器中同時自動打開它。如果你可以想到一個更簡單的方式來打開文本文件,我全都耳熟能詳。 – Daniel

回答

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> 

參考:Invoking Applet Methods From JavaScript

更新

JavaScript是允許直接調用applet的公共方法或公共變量。 Javascript將嵌入式Applet視爲一個對象。通過提供Applet的一個ID,使用Javascript可以

document.Applet_ID.Applet_Method() 

訪問它,你可以用這個,

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

如何比'getElementById'更具可讀性? – Ian

+2

從什麼時候你可以做'document.Applet_ID'? – Ian

+0

@Daniel現在,通過我的更新 – Ravi