Hallo zusammen,
Ich habe mich heute drangesetzt einen Chat mit Socketserver im Browser zu Programmieren. Ich will dabei nur den Server und ein Applet, dass mit der JavaScript-Seite kommuniziert in Java schreiben, der Rest soll HTML, JS, .. sein. Das Applet stellt die Socketverbindung dar. Das funktioniert auch ganz gut, z.B. kann ich mit
eine Nachricht an den Server schicken, die dort auch ankommt. ( Dass mache ich nicht im AppletViewer sondern im Browser (FF 17 glaub ich))
Wenn ich aber jetz von meinem Applet aus JS aufrufen will, dann mache ich das mit JSObject (Die plugin.jar habe ich eingebunden). Wenn ich dann das ganze mit Eclipse kompilieren möchte bekommen ich immer eine Fehlermeldung
Hier der Code etwas gekürzt, aber er kann getestet werden, und der Fehler ist der selbe:
Durch stundenlanges Googlen habe ich herausgefunden, dass der AppletViewer keine JSEngine hat und ich deshalb das Applet nicht kompilieren kann. Es muss doch irgendwie möglich sein, trotzdem mit JSObject zu arbeiten?
Wäre euch sehr dankbar wenn ihr mir helfen könnt
Yanko
Ich habe mich heute drangesetzt einen Chat mit Socketserver im Browser zu Programmieren. Ich will dabei nur den Server und ein Applet, dass mit der JavaScript-Seite kommuniziert in Java schreiben, der Rest soll HTML, JS, .. sein. Das Applet stellt die Socketverbindung dar. Das funktioniert auch ganz gut, z.B. kann ich mit
Code:
document.SocketBridge.send('Nachricht');
eine Nachricht an den Server schicken, die dort auch ankommt. ( Dass mache ich nicht im AppletViewer sondern im Browser (FF 17 glaub ich))
Wenn ich aber jetz von meinem Applet aus JS aufrufen will, dann mache ich das mit JSObject (Die plugin.jar habe ich eingebunden). Wenn ich dann das ganze mit Eclipse kompilieren möchte bekommen ich immer eine Fehlermeldung
Code:
java.lang.NoClassDefFoundError: com/sun/deploy/appcontext/AppContext
at SocketBridge.init(SocketBridge.java:20)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.sun.deploy.appcontext.AppContext
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 3 more
Hier der Code etwas gekürzt, aber er kann getestet werden, und der Fehler ist der selbe:
Java:
import java.applet.*;
import javax.swing.*;
import netscape.javascript.*;
import java.net.*;
import java.io.*;
public class SocketBridge extends JApplet {
private static final long serialVersionUID = 1L;
private JSObject browser = null;
private Socket socket = null;
private int port;
private String url;
public void init() {
try {
this.browser = JSObject.getWindow(this);
} catch (JSException e) {
}
}
public void start() {
if (this.browser == null) {
try {
this.browser = JSObject.getWindow(this);
} catch (JSException e) {
}
}
}
public boolean connect(String url, int port) {
this.url = url;
this.port = port;
try {
this.browser.call("printTest", null); // Die Funktion printTest gibt es in JS und gibt ohne Fehler ein alert aus!
} catch (JSException e) {
return false;
}
return true;
}
public boolean send(String message) {
return true;
}
}
Durch stundenlanges Googlen habe ich herausgefunden, dass der AppletViewer keine JSEngine hat und ich deshalb das Applet nicht kompilieren kann. Es muss doch irgendwie möglich sein, trotzdem mit JSObject zu arbeiten?
Wäre euch sehr dankbar wenn ihr mir helfen könnt
Yanko