используйте deployJava.js для вызова методов Java в JavaScript - PullRequest
0 голосов
/ 30 марта 2012

Я хочу вызвать java-методы в javascript, и Эндрю Томпсон предложил использовать для этого библиотеку deployJava.js.Я следовал этим инструкциям: http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html

Здесь объясняется, как использовать класс java в javascript, но я хотел бы вызывать методы java из javascript.(Это потому, что я хочу импортировать файл .owl в java и экспортировать информацию в формате json в мой код, написанный на javascript.) Кто-нибудь знает, как это сделать с помощью библиотеки deployJava?

ЭтоМой код для импорта файла Java:

<noscript>A browser with JavaScript enabled is required for this page to operate properly.</noscript>
    <h1>Sending Messages to Other Applets</h1>
    <script>
        function sendMsgToIncrementCounter() {
        receiver.incrementCounter();
    }
</script>

<p>Sender Applet</p>
<script>
    var attributes = { id:'sender', code:'Sender.class', width:300, height:50} ;
    var parameters = {} ;
    deployJava.runApplet(attributes, parameters, '1.6');
</script>
<br/>
<br/>
<p>Receiver Applet</p>
<script>
    var attributes = { id:'receiver', code:'../Receiver.class', width:300, height:50} ;
    var parameters = {} ;
    deployJava.runApplet(attributes, parameters, '1.6');
</script>

и это файлы Java отправителя и получателя:

import javax.swing.*;

public class Receiver extends JApplet {
    private int ctr = 0;
    private JLabel  ctrLbl = null;

    public void init() {
        //Execute a job on the event-dispatching thread; creating this applet's GUI.
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {             
                    ctrLbl = new JLabel("");
                    add(ctrLbl);
                }
            });
        } catch (Exception e) {
            System.err.println("Could not create applet's GUI");
        }
    }

    public void incrementCounter() {
        ctr++;
        String text = " Current Value Of Counter: " + (new Integer(ctr)).toString();
        ctrLbl.setText(text);
    }
}

import javax.swing.*;

import java.awt.event. ;импорт netscape.javascript. ;

открытый класс Sender расширяет, JApplet реализует ActionListener {

public void init() {
    //Execute a job on the event-dispatching thread; creating this applet's GUI.
    try {
        final ActionListener al = this;
        SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                JButton btn = new JButton("Click To Increment Counter");
                add(btn);
                btn.addActionListener(al);
            }
        });
    } catch (Exception e) {
        System.err.println("createGUI didn't complete successfully");
    }
}

public void actionPerformed(ActionEvent e) {
    try {
        JSObject window = JSObject.getWindow(this);
        window.eval("sendMsgToIncrementCounter()");
    } catch (JSException jse) {
        jse.printStackTrace();
    }
}

}

Я просто скопировал и вставил это из примера, приведенного на этом сайте: http://docs.oracle.com/javase/tutorial/deployment/applet/iac.htmlЭтот пример отлично работает в моем браузере, поэтому способ его выполнения верен, но я подозреваю, что я не импортирую правильный javafiles, так как это ошибки из je java-console:

load: class Sender.class not found.
java.lang.ClassNotFoundException: Sender.class
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:195)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Plugin2ClassLoader.java:249)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:179)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:160)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Plugin2ClassLoader.java:690)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3045)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1497)
    at java.lang.Thread.run(Thread.java:680)
Exception: java.lang.ClassNotFoundException: Sender.class

Ответы [ 3 ]

1 голос
/ 30 марта 2012

Я бы посоветовал установить простой веб-сервис, который может использовать ваш код JavaScript. Это не должно быть очень сложным, лично я бы использовал простую схему REST с JAX-RS (с jersey действительно приятно работать), особенно если вы хотите что-то простое со встроенной поддержкой JSON. в (с правильным плагином).

Попытка на самом деле связаться с апплетом на странице может быть возможной, но очень зависимой от браузера и ИМХО, не стоит хлопот. Если вы работаете в Интернете, вы можете использовать веб-сервис.

1 голос
/ 30 марта 2012

Сочетание вашего оригинального метода с новым фрагментом JS и частью принятого ответа на ваш последний вопрос (измененный) дает ..

<html>
<head>
<script>
// dangerous to have a 0x0 applet!  Some security plug-ins regard it 
// as suspicious & automatically remove the element.  Better to set it
// not visible using styles
var attributes = {
    codebase:'../sesame',
    code:'applet_test',
    width:10, 
    height:10
};
var parameters = {fontSize:16} ;
var version = '1.6' ;
deployJava.runApplet(attributes, parameters, version);

function test() {
    var app = document.applet_test;
    alert("Screen Dimension\r\n  width:" + app.getScreenWidth()
        + " height:" + app.getScreenHeight());
}
</script>
<body>

<FORM>
<INPUT 
    type="button" 
    value="call JAVA"
    onClick = "test()">
</FORM>

<script>
deployJava.runApplet(attributes, parameters, version);
</script>

</body>
</html>

Но я только что написал это с самого началамоя голова.Не верьте мне, доверьтесь службе проверки .;)

0 голосов
/ 31 марта 2012

Возникла проблема с каталогом файлов .class, указанных в атрибутах. Вот правильный код:

<p>Sender Applet</p>
<script>
    var attributes = { id:'sender', code:'sesame/Sender.class', archive:'sesame/applet_SenderReceiver.jar', width:300, height:50} ;
    var parameters = {} ;
    deployJava.runApplet(attributes, parameters, '1.6');
</script>
<br/>
<br/>
<p>Receiver Applet</p>
<script>
    var attributes = { id:'receiver', code:'sesame/Receiver.class', archive:'sesame/applet_SenderReceiver.jar', width:300, height:50} ;
    var parameters = {} ;
    deployJava.runApplet(attributes, parameters, '1.6');
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...