Как вызвать метод, объявленный в апплете из JavaScript
Я пытаюсь сделать простой Java-апплет, чтобы открыть для них файл на клиентском компьютере. Я хотел бы вызвать функцию openFile в java-апплете ниже через 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();
}
}
}
Между тегами body моей веб-страницы есть следующее:
<applet code="Test.class" height="0" width="0"></applet>
<script type="text/javascript">
document.applets[0].openFile("C:\\test.log");
</script>
Когда я загружаю страницу, я получаю сообщение об ошибке:
TypeError: Object # не имеет метода 'openFile'
Кто-нибудь знает, что мне нужно сделать, чтобы исправить эту ошибку и заставить апплет работать?
1 ответ
Решение
<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>
Ссылка: вызов методов апплета из JavaScript
Обновить
Javascript разрешается напрямую вызывать открытые методы или открытые переменные Applet. Javascript рассматривает встроенный апплет как объект. Предоставляя апплету идентификатор, 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);
}
}