3

我正在编写一个 Java 程序,它使用 Lua 脚本来确定向程序的某些区域输出什么。目前,我的代码如下所示:

Globals globals = JsePlatform.standardGlobals();
LuaValue chunk = globals.loadfile(dir.getAbsolutePath() + "/" + name);
chunk.call();
String output = chunk.tojstring();

问题是调用tojstring()似乎return从 Lua 脚本返回值。这很好,但我需要print接听电话,因为这就是屏幕上显示的内容。截至目前,print调用直接发送到控制台(打印到控制台),我无法找到检索这些打印调用的方法。

我尝试过深入研究文档,但收效甚微。如果需要,将从 LuaJ 更改。

4

2 回答 2

4

扩展 Joseph Boyle 的回答(几年后):如果那是您的毒药,您还可以将 printStream 设置为 ByteArrayOutputStream (无需对磁盘上的文件执行此操作)。我在 LuaJ 的 JUnit 测试中做到了这一点,它可以工作:

  @Test
  public void testPrintToStringFromLuaj() throws IOException {
    String PRINT_HELLO = "print (\"hello world\")";
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PrintStream printStream = new PrintStream(baos, true, "utf-8");
    Globals globals = JsePlatform.standardGlobals();
    globals.STDOUT = printStream;
    LuaValue load = globals.load(PRINT_HELLO);
    load.call();
    String content = new String(baos.toByteArray(), StandardCharsets.UTF_8);
    printStream.close();
    assertThat(content, is("hello world\n"));
  }
于 2017-12-06T17:27:20.200 回答
1

我实际上能够通过将对象中的STDOUT变量更改globals为临时文件,然后从临时文件中读取数据来解决问题。

可能不是最好的解决方案,但工作得很好。

于 2014-11-29T04:06:07.567 回答