2009-05-10 11 views
0

Ich versuche Lesevariablen aus einem Java-Applet außerhalb des Prozesses aus meinem C# -Programm zu erreichen. Kann ich außer dem Lesen von Speicheradressen auch Werte von Variablen aus einem Java-Applet erhalten? Dieses Java-Applet wird in einem Browser ausgeführt. Wenn es nicht möglich ist, dies von C# aus zu tun, wäre es möglich, dies von einem anderen Java-Applet aus zu tun?Java-Variablen lesen

Danke.

Antwort

1

Wenn Sie den Code des Applets ändern können, können Sie es einen RMI-Server hosten, die das Subjekt von this excercise. Ich bin jedoch kein Experte für das Thema - ich nehme an, dass es verschiedenen Sicherheitsbeschränkungen unterliegen kann.

Wenn Sie kann nicht Änderung des Applets, aber Sie können die HTML-Seite ändern das Applet zeigt, gibt es zwei Möglichkeiten, um Informationen aus dem Applet zugreifen.

Die erste Möglichkeit besteht darin, das Applet mit Javascript zu scripten, wie es @Margus vorschlägt (alle öffentlichen Methoden des Applet-Objekts werden über das DOM-Objekt des Applets zugänglich gemacht).

Die andere Möglichkeit besteht darin, ein eigenes Applet in die Seite einzufügen und getAppletContext() zu verwenden, um einen Verweis auf das andere Applet zu erhalten. Der Hauptvorteil dieser Vorgehensweise besteht darin, dass Sie über Reflektion auf nicht öffentliche Informationen aus dem Drittanbieter-Applet zugreifen und diese mit einem RMI-Server (wie oben) veröffentlichen können.

-1

Nein. Was Sie versuchen, ist unmöglich von einem Java Applet oder von einer anderen Sprache, Prozess.

0

Dies ist überhaupt nicht möglich.

Prozesse, per Definition, teilen nicht Speicher, oder eine andere Ressource für diese Angelegenheit. Dies wird auf Betriebssystemebene erzwungen, und Sie können nichts dagegen tun.

Wenn dies möglich war, können Sie sich nur vorstellen, welches Sicherheits-/Stabilitätsproblem dies gewesen sein könnte.

Wenn Sie wirklich Inter-Prozess-Kommunikation benötigen, überprüfen Sie die Socket-Programmierung in Ihrer Sprache. Beachten Sie, dass dazu sowohl der Client (Ihr Java-Applet) als auch der Server (der C# -Prozess) geändert werden müssen.

+1

Sie können einen anderen Prozessspeicher aus fast jeder Sprache lesen. – Tom

+0

@Tom - ist das so? Geben Sie mir ein Beispiel in jeder Mainstream-Sprache Ihrer Wahl ... –

+0

Unter Windows können Sie verwenden Readprocessmemory (http://msdn.microsoft.com/en-us/library/ms680553(VS.85).aspx), natürlich Dazu benötigen Sie Zugriffsrechte. – staffan

0

Sie können auf Informationen aus dem laufenden Java-Prozess (einschließlich in einem Browser) zugreifen, wenn Sie ein JDK installiert haben und eine spätere JVM ausführen. Werfen Sie einen Blick auf diese JDK tools.

2

Ja, es kann getan werden.

C# Form kann Host Webbrowser Komponente haben, und es kann JScript auslösen, und es kann Java-Applet öffentliche Methoden aufrufen.

Vor einiger Zeit habe ich eine einfache Webseite erstellt, die ein Applet enthält, das 'hot'-farbige Karte zeichnet. Eingabe wird mit JScript injiziert, und COULD kann mit AJAX oder einer anderen Anwendung abgerufen werden, die JScript in HTML DOM auslösen kann.

Quelle von HTML ist:

<HTML><HEAD></HEAD><BODY> 
<SCRIPT> 
function call() { 
    var inputData = "-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2" 
     + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,0,1647,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2" 
     + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,89,0,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2" 
     + ";-2,-2,-2,-2,-2,-2,-2,0,0,615,366,0,1198,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2" 
     + ";-2,-2,-2,-2,-2,-2,0,2179,1262,764,200,0,0,609,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2" 
     + ";-2,-2,-2,-2,-2,0,0,3401,1940,0,210,0,-1,-1,162,0,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2" 
     + ";-2,-2,-2,-2,-2,-2,0,-1,966,0,86,0,0,0,0,-1,-1,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2" 
     + ";-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,0,-1,250,53,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2" 
     + ";-2,-2,-2,-2,-1,1977,1413,128,0,0,0,0,0,0,-1,1413,2447,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2" 
     + ";-2,-2,-2,0,-1,0,0,0,0,0,0,0,-1,317,0,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2" 
     + ";-2,-2,-2,0,0,0,0,0,0,0,0,0,0,3246,2190,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2" 
     + ";-2,51,0,-1,0,0,0,-1,0,-1,0,-1,-1,1523,-2,-2,-2,-1,0,0,-2,-2,0,0,-2,-2,-2,-2,-2" 
     + ";-2,0,0,0,0,0,0,0,0,0,0,1692,2028,2850,-2,0,-1,0,0,0,0,0,0,0,-1,-2,-2,-2,-2" 
     + ";-2,0,0,0,0,0,-1,0,0,0,-1,1292,-2,-2,-2,0,0,-1,-1,0,0,0,0,0,-1,0,-2,-2,-2" 
     + ";-2,0,-1,0,0,-1,0,0,-1,0,1028,1247,7675,9244,7940,0,-1,0,0,-1,0,0,0,0,0,0,0,-2,-2" 
     + ";-2,-1,0,0,0,0,0,0,0,0,844,1114,2860,6631,4249,0,0,-1,-1,0,0,0,0,0,0,0,0,-2,-2" 
     + ";-2,-2,0,0,0,-1,0,-1,0,0,0,-1,1958,2379,-1,0,0,0,0,0,0,0,0,-1,0,0,0,-2,-2" 
     + ";-2,-2,-2,0,470,0,-2,-2,-2,0,0,0,-1,0,0,0,0,0,-1,0,-1,0,0,3574,2706,2195,-1,-2,-2" 
     + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,-1,-1,0,0,0,0,0,0,0,0,165,-1,-1,1282,867,0,-2" 
     + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,-1,0,0,0,0,34,504,3098,2708,2324,-1,0,-2" 
     + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,-1,0,0,0,0,0,0,0,0,0,721,-1,3854,2783,-1,0,-2" 
     + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,-1,0,0,0,-1,0,34,191,2455,4126,0,0,-2" 
     + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,0,0,3982,2656,0,0,-1,0,0,-2,-2" 
     + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,-1,0,0,2194,0,0,0,0,-2,-2,-2,-2" 
     + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,-1,0,0,-2,-2,-2,-2,-2,-2,-2" 
     + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"; 
    document.Necrodrip.update(inputData); 
} 
</SCRIPT> 
<FORM> 
<APPLET CODE="kuningriik.pdApplet.class" 
     NAME="Necrodrip" 
     width="1200" height="600"> 
</APPLET><br/> 
<INPUT type="button" value="Loo kaart" 
    onClick = "call()"> 
</FORM> 
</BODY></HTML> 

Sie Seite hier sehen können: link

0

Dies ist, was Debugger die ganze Zeit tun, so klar ist es möglich.In neueren Versionen von Sun Java binden Sie JVM Tool Interface (JVMTI) relativ einfach an, nachdem ein Prozess gestartet wurde. Es ist jedoch nicht unbedingt sehr einfach.

Wenn Sie die Applet Quelle zu steuern (oder auch wenn Sie es nicht tun), dann ist es wahrscheinlich einfacher, Daten über eine Netzwerkverbindung zu teilen.