0

我是 HDF5 和 HDFql 的新手,我在 java 中工作,我有一个包含多个组的 .h5 文件,在每个组中我有不同的数据集,有些是浮动数组,我得到如下。 https://gyazo.com/c10100b327d20a2db8c13f2fd9ab7668

 Double[][] values = new Double[numRow][numCol];
 HDFql.variableRegister(values);
 HDFql.execute("SELECT FROM "+gName+"/"+dName+" INTO MEMORY "+HDFql.variableGetNumber(values));
 HDFql.variableUnregister(values);

当我有一个变量为 1 行 1 列且数据类型为字符串的数据集时,就会出现问题。 https://gyazo.com/2622693aee83d9eba5487a053ba9247c

我尝试实现以下代码,但收到以下错误消息

  String[] val = new String[10];
  HDFql.variableRegister(val);
  HDFql.execute("SELECT FROM "+gName+"/"+dName+" INTO MEMORY "+HDFql.variableGetNumber(val));
  HDFql.variableUnregister(val);

String val = "";
HDFql.variableRegister(val);
HDFql.execute("SELECT FROM "+gName+"/"+dName+" INTO MEMORY "+HDFql.variableGetNumber(val));
HDFql.variableUnregister(val);

控制台显示的错误是:

Java 运行时环境检测到一个致命错误:

pc = 0x000000006da2f270,pid = 42048,tid = 0x00000000000089d4 处的异常_访问_VIOLATION (0xc0000005)

JRE 版本:Java(TM) SE 运行时环境 (8.0_211-b12) (build 1.8.0_211-b12) Java VM:Java HotSpot(TM) 64-Bit Server VM (25.211-b12 混合模式 windows-amd64 压缩 oops) 有问题框架:V [jvm.dll+0x27f270]

无法写入核心转储。默认情况下,在 Windows 的客户端版本上不启用小型转储

包含更多信息的错误报告文件保存为:C:\Users\us\AppData\Local\Temp\hs_err_pid42048.log

如果您想提交错误报告,请访问:
http ://bugreport.java.com/bugreport/crash.jsp

欢迎任何帮助,非常感谢您提前

4

3 回答 3

0

即使数据集只有一个元素(在您的情况下,1 行 x 1 列),您仍然需要将变量(您注册以存储数据)声明为数组。换句话说,声明和创建变量val如下:

String val[] = new String[1];

此外,请查看 HDFql参考手册中的第 5.2.51 节以了解您可以variableRegister在 Java 中注册(使用方法)的变量类型。

于 2020-06-05T11:07:26.550 回答
0

我正在使用 Vaadin 框架来开发 Web 应用程序,我没有创建任何线程,但我认为当用户与浏览器的组件(按钮、组合框等)交互时,这个框架可能会创建线程。我试图从构造函数运行该方法,该方法在您导航到该视图时运行,第一次导航时它可以正常工作,但是,当您返回导航或刷新网页时无法访问。就像 HDFql 正在缓存或保存先前访问的内存地址,当您再次浏览或单击按钮时,某些变量将更改其内存指针,而不是使用新指针,HDFql 正在尝试重用以前的内存地址。

方法: http ://cpp.sh/8s5c3

日志: http ://cpp.sh/3zgxa

于 2020-07-01T08:05:24.247 回答
0

对不起,我的回答延迟。

问题仍然存在,我找到了一种访问 1 Row x 1 Col 变量的方法。然而,问题似乎是另一个问题。

我有一个实现 HDFql 调用的方法,如下所示。 https://gyazo.com/c3bc1e4e568cb4277607fa21ea71445f

如果我从类构造函数对方法 https://gyazo.com/9dee4e0b9a0ea69e73089b2802dbdad9进行 2 次调用,则 工作正常,结果我得到了我咨询过的两个数据集。 https://gyazo.com/40e4485408fe08e7cf9a1ad8baf97a9d https://gyazo.com/372fc6cb991992e82340325dfd0b548d

但是,当我尝试在单击按钮时在侦听器上运行相同的方法时。 https://gyazo.com/928ee0b90e8b864fe6908b79e56da7a7 https://gyazo.com/f8c044e298208fa9f94c8be7bc5e1de3

Java中发生错误,我已将内存堆增加到最大8Gb,并且在完成查询后释放了HDFql的所有变量,但错误仍然存​​在。我不明白为什么如果调用是从构造函数进行的,即使它是几个连续的调用,它也会起作用,相反,如果调用是从构造函数以外的方法进行的,则会返回下一个错误。

* Java 运行时环境检测到一个致命错误:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) 在 pc=0x0000000054f6f1c2,pid=137068,tid=0x0000000000014d88

JRE 版本:Java(TM) SE 运行时环境 (8.0_211-b12) (build 1.8.0_211-b12) Java VM:Java HotSpot(TM) 64-Bit Server VM (25.211-b12 混合模式 windows-amd64 压缩 oops) 有问题框架:V [jvm.dll+0x15f1c2]

无法写入核心转储。默认情况下,在 Windows 的客户端版本上不启用小型转储

包含更多信息的错误报告文件保存为:C:\Users\Code\AppData\Local\Temp\hs_err_pid137068.log

如果您想提交错误报告,请访问: http ://bugreport.java.com/bugreport/crash.jsp 崩溃发生在 Java 虚拟机之外的本地代码中。请参阅有问题的框架以了解报告错误的位置。*

于 2020-06-30T07:59:55.507 回答