首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问nodejs脚本中的j2v8对象

无法访问nodejs脚本中的j2v8对象
EN

Stack Overflow用户
提问于 2018-01-09 02:13:44
回答 1查看 293关注 0票数 0

我尝试在我的Java项目中使用j2v8运行一个nodeJS脚本,它可以正常运行,但我无法获得数组或任何其他JScript对象,尽管此功能是通过j2v8提供的。此外,该脚本还使用了一个名为Blocktrail的npm模块来生成Array。对该对象的调用在函数testExportAnalyzer()中。这里它抛出对象不包含"test“。请问,谁能解释一下我如何在Java代码中使用变量或所需的数组,或者我做错了什么?

代码语言:javascript
复制
public ScriptLoader(String adr) {

    address = adr;
    addressInformation = null;

    NODE_SCRIPT = ""
            +"var test = \"123456\";\n"
            +"var blocktrail = require('/blocktrail-sdk');\n"
            +"var addressInformation = null;\n"
            +"var client = blocktrail.BlocktrailSDK({apiKey : \"xxxxxx\", apiSecret : \"xxxxxx\"});\n"
            +"client.address(\""+address+"\", function(err, address) {\n"
            +" if (err) {\n"
            +" console.log('address ERR', err);\n"
            +" return;\n"
            +"  }\n"
            +" addressInformation = address;"
            +"console.log('address:', address['address'], 'balance:', address['balance'] / blocktrail.COIN, 'sent and received in BTC:', address['sent'] / blocktrail.COIN, address['received'] / blocktrail.COIN, 'number of transactions:', address['total_transactions_out'], address['total_transactions_in']);\n"
            +"});\n"
            +"\n"
            +"client.addressTransactions(\""+address+"\", {limit: 100}, function(err, address_txs) {\n"
            +" console.log('address_transactions', address_txs['data'].length, address_txs['data'][0]);\n"
            +"});";

}

public void executeAnalyzerScript() throws IOException {

    final NodeJS nodeJS = NodeJS.createNodeJS();
      JavaCallback callback = new JavaCallback() {

        public Object invoke(V8Object receiver, V8Array parameters) {
          return "Hello, JavaWorld!";
        }
      };

      nodeJS.getRuntime().registerJavaMethod(callback, "someJavaMethod");
      File nodeScript = createTemporaryScriptFile(NODE_SCRIPT, "addressScript");

      nodeJS.exec(nodeScript);

      while(nodeJS.isRunning()) {
        nodeJS.handleMessage();
      }
      nodeJS.release(); 
}

public void testExportAnalyzer() throws IOException {

    NodeJS nodeJS = null;

    File testScript = createTemporaryScriptFile(NODE_SCRIPT, "Test");

    nodeJS = NodeJS.createNodeJS();
    V8Object exports = nodeJS.require(testScript);

    while(nodeJS.isRunning()) {
        nodeJS.handleMessage();
      }

    System.out.println(exports.contains("test"));
    exports.release();


}

private static File createTemporaryScriptFile(final String script, final String name) throws IOException {
    File tempFile = File.createTempFile(name, ".js.tmp");
    PrintWriter writer = new PrintWriter(tempFile, "UTF-8");
    try {
        writer.print(script);
    } finally {
        writer.close();
    }
    return tempFile;
}

public void setAddress(String input) {
    address = input;
}
EN

回答 1

Stack Overflow用户

发布于 2018-02-11 17:44:47

通过在Javascript代码中编写如下变量,我取得了一些成功:

global.myvar = "myval";

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48155858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档