Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSObject-JavaScript数组是否作为Java数组传递?_Java_Javascript_Casting - Fatal编程技术网

JSObject-JavaScript数组是否作为Java数组传递?

JSObject-JavaScript数组是否作为Java数组传递?,java,javascript,casting,Java,Javascript,Casting,我正在尝试将一个复杂的Java小程序转换为JavaScript。小程序在TCP套接字上进行通信时发挥了各种神奇的作用,我需要用JavaScript进行模拟。TCP魔术本身非常复杂,所以我宁愿以后再做,先让小程序的图形部分工作。TCP套接字上的通信告诉小程序要绘制什么,因此根据套接字上的数据,小程序将读取/写入不同的值 我目前的攻击计划是: 根据请求类型,将请求头作为参数(工作)以及所需数据从套接字传递给JavaScript 解析JS中发送的头参数/数据,并相应地创建对象 使用要写入TCP套接字

我正在尝试将一个复杂的Java小程序转换为JavaScript。小程序在TCP套接字上进行通信时发挥了各种神奇的作用,我需要用JavaScript进行模拟。TCP魔术本身非常复杂,所以我宁愿以后再做,先让小程序的图形部分工作。TCP套接字上的通信告诉小程序要绘制什么,因此根据套接字上的数据,小程序将读取/写入不同的值

我目前的攻击计划是:

  • 根据请求类型,将请求头作为参数(工作)以及所需数据从套接字传递给JavaScript
  • 解析JS中发送的头参数/数据,并相应地创建对象
  • 使用要写入TCP套接字的字节数组返回调用Java函数的值
我被最后一部分卡住了。如果返回一个字节数组,如何将其转换为byte[]或类似值?传递回的值是正确的Java数组还是某种对象哈希

爪哇:

JavaScript:

function someFunction (blah, cool) {
    return [5, 7, 12, 2];
}
注:


复杂的Java小程序是多线程的,因此只需调用小程序中的某些函数是非常重要的。

刚刚编写了一个示例来检查=)

Test.java:

import java.applet.Applet;
import java.awt.*;
import netscape.javascript.JSObject;

public class Test extends Applet {
  public void init() {
    JSObject window = JSObject.getWindow(this); // this=applet
    String[] params = {"blah", "cool"};
    Object ret = window.call("testfunc", params);
    if (ret instanceof JSObject){
      JSObject jsret = (JSObject)ret;
      Object len = jsret.getMember("length");
      String val = "";
      if (len instanceof Number){
        val = "array: ";
        int n = ((Number)len).intValue();
        for (int i = 0; i < n; ++i){
            val += jsret.getSlot(i).toString() + " ";
        }
      } else{
        val = "no array: " + ret.toString();
      }
      String[] params2 = {val};
      window.call("alert", params2);
    } else{
      String[] params2 = {ret.toString()};
      window.call("alert", params2);
    }
  }
}
import java.applet.applet;
导入java.awt.*;
导入netscape.javascript.JSObject;
公共类测试扩展Applet{
公共void init(){
JSObject window=JSObject.getWindow(this);//this=applet
字符串[]params={“blah”,“cool”};
Object ret=window.call(“testfunc”,params);
if(JSObject的ret instanceof){
JSObject jsret=(JSObject)ret;
对象len=jsret.getMember(“长度”);
字符串val=”“;
if(len instanceof Number){
val=“数组:”;
intn=((数字)len.intValue();
对于(int i=0;i
Test.html:

<html>
  <head>
    <title> Test </title>
      <script language="JavaScript">
        function testfunc(a, b){
          return [1, 2];
        }
      </script>
    </head>
    <body>
      <applet code="Test.class" archive="." width="500" height="200"><param name="codebase_lookup" value="false"></applet>
    </body>
</html>

试验
函数testfunc(a,b){
返回[1,2];
}
被视为有效(图19.5和19.6)。你可以在我的代码中看到我选中了
len instanceof Number
而不是
len instanceof Double
,因为在我的IE中,它返回了一个
整数
,我猜
ret
应该是一个netscape.javascript.JSObject。如果它是javascript中的数组,您是否尝试使用
ret.getSlot
<html>
  <head>
    <title> Test </title>
      <script language="JavaScript">
        function testfunc(a, b){
          return [1, 2];
        }
      </script>
    </head>
    <body>
      <applet code="Test.class" archive="." width="500" height="200"><param name="codebase_lookup" value="false"></applet>
    </body>
</html>