我正在尝试从C#程序的进程外读取Java applet中的变量。除了读取内存地址之外,有没有什么方法可以从java applet获取变量的值?该java小应用程序将在浏览器内运行。如果在C#中不能做到这一点,那么可以从不同的java小程序中做到这一点吗?
谢谢。
发布于 2009-05-10 13:04:41
如果您可以更改小程序的代码,就可以让它承载一个RMI服务器,这是this excercise的主题。不过,我不是这方面的专家--我认为它可能会受到各种安全限制。
如果不能更改小程序,但可以更改显示小程序的HTML页面,则有两种方法可以从小程序访问信息。
第一种方法是使用Javascript编写applet脚本,就像@Margus建议的那样( applet对象的所有公共方法都通过applet的DOM对象公开)。
另一种方法是将您自己的小程序放在页面中,并使用getAppletContext()获取对其他小程序的引用。这样做的主要好处是,您可以通过反射从第三方applet访问非公共信息,并使用RMI服务器发布它(如上所述)。
发布于 2009-05-10 12:56:13
是的,这是可以做到的。
C#窗体可以有可以宿主webbrowser组件,可以触发JScript,可以调用Java applet公共方法。
不久前,我制作了一个简单的网页,其中包含一个绘制“热门”颜色地图的applet。输入是用JScript注入的,可以用AJAX或任何其他可以在HTML DOM上触发JScript的应用程序来检索。
HTML的来源是:
<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> 您可以在此处查看页面:link
发布于 2009-05-10 12:30:25
这是完全不可能的。
根据定义,进程不共享内存、或任何其他资源。这是在操作系统级别强制执行的东西,您对此无能为力。
如果这是可能的,您只能想象这可能是什么安全/稳定性问题。
如果您确实需要进程间通信,请查看您所用语言中的套接字编程。请注意,这将需要对客户机( Java applet)和服务器( C#进程)进行更改。
https://stackoverflow.com/questions/845209
复制相似问题