阅读Java变量

时间:2009-05-10 12:05:53

标签: java memory applet

我正在尝试从我的C#程序中从Java applet中读取变量。除了读取内存地址,我有什么方法可以从java applet获取变量值?这个java applet将在浏览器中运行。如果无法从C#执行此操作,是否可以从其他Java小程序执行此操作?

感谢。

6 个答案:

答案 0 :(得分:2)

是的,可以做到。

C#表单可以拥有webbrowser组件,它可以触发JScript,它可以调用Java 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

答案 1 :(得分:1)

如果您可以更改applet的代码,则可以让它托管一个RMI服务器,该服务器是this excercise的主题。我不是这个主题的专家 - 我认为它可能受到各种安全限制。

如果您无法更改小程序,但可以更改显示小程序的HTML页面,则有两种方法可以从小程序中访问信息。

第一种方法是使用像@Margus建议的Javascript编写applet脚本(applet对象的所有公共方法都通过applet的DOM对象公开)。

另一种方法是在页面中放置自己的applet,并使用getAppletContext()获取对其他applet的引用。这样做的主要好处是您可以通过反射从第三方applet访问非公开信息,并使用RMI服务器发布它(如上所述)。

答案 2 :(得分:0)

这根本不可能。

根据定义,进程不共享内存或任何其他资源。这是在操作系统级别强制实施的,您无法做任何事情。

如果可能,您只能想象这可能存在的安全性/稳定性问题。

如果您确实需要进程间通信,请查看您所用语言的套接字编程。请注意,这将需要更改客户端(您的Java小程序)以及服务器(C#进程)。

答案 3 :(得分:0)

如果安装了JDK并且正在运行更高版本的JVM,则可以从正在运行的Java进程(包括在浏览器中)访问信息。看看这些JDK tools

答案 4 :(得分:0)

这是调试器一直在做的事情,所以显然它是可能的。在最新版本的Sun Java中,您可以在进程启动后相对轻松地附加JVM工具接口(JVMTI)。但是,它不一定非常容易。

如果您控制小程序源(或者即使您没有),通过网络连接共享数据可能更容易。

答案 5 :(得分:-1)

没有。您正在尝试从Java Applet或任何其他语言进程中执行此操作。