2011-11-14 1 views
2

J'ai un site Web avec une applet Java et cette applet doit se connecter à mon serveur. Cela fonctionne dans JApplets @Override init() mais pas dans mes propres fonctions qui sont appelées par javascript.Applet URLConnection.connect échoue après avoir été appelé à partir de JavaScript

final URL url = new URL(SERVER_URL + action); 
System.out.println("url:" + url); 
System.out.println("postString: " + postString); 
final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
if(!postString.isEmpty()) { 
    connection.setRequestMethod("POST"); 
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    connection.setRequestProperty("Content-Length", Integer.toString(postString.getBytes().length)); 
    connection.setUseCaches(false); 
    connection.setDoInput(true); 
    connection.setDoOutput(true); 

    System.out.println("connecting..."); 
    connection.connect(); // same with connection.getOutputStream(); 
    System.out.println("connected"); 
    .... 

site:

<a href="javascript: document.applet.update();" title="update from server">Update</a> 
<applet id="applet" archive="/public/Antucation-0.1.0.jar?random=3765332307555812156" code="de.antucation.controller.Controller.class" width="100%" height="800px"> 
<param name="colonyId" value="1"> 
</applet> 

sortie:

url:http://localhost:9000/applet/showCode 
postString: colonyId=1 
connecting... 

J'ai une prise d'essai autour d'elle avec un appel System.out, mais rien ne se passe non plus. Cependant, cela fonctionne bien absolutly:

@Override 
public void init() { 
    update(); 
} 

Oh, et l'applet bien sûr vient aussi de http://localhost:9000/

Comment puis-je travaille autour de ce ou résoudre ce problème?

+0

comment vous appelez cela de javascript? –

+0

Salut, stackoverflow a perdu 90% de mon message quand je l'ai soumis, j'ai été en mesure d'éditer et de le réparer quelques secondes plus tard. tout est là maintenant :) – Alex

Répondre

2

Essayez quelque chose le long des lignes de:

public void callFromJavaScript(final String param) { 
    AccessController.doPrivileged(new PrivilegedAction<Void>() { 
     public Void run() { 
      // call code to make the connection.. 
      return null; 
     } 
    }); 
} 
+0

Merci beaucoup, j'ai déjà passé 10 heures là-dessus! Pour mémoire: \t public void callFromJavaScript() { \t \t AccessController.doPrivileged (nouvelle PrivilegedAction () { \t \t \t @Override \t \t \t public void run() { \t \t \t \t mise à jour() \t \t \t \t \t return null; \t \t \t} \t \t}); \t} – Alex

+0

Oh oui, cela a été copié à la hâte à partir d'un problème identique que je voyais dans l'interaction JS/applet plus tôt aujourd'hui. Je suis heureux que tu l'aie résolu. –

Questions connexes