【问题标题】:rJava: How to get stack traces / more verbose error?rJava:如何获取堆栈跟踪/更详细的错误?
【发布时间】:2015-12-07 11:15:26
【问题描述】:

有没有办法让 rJava 打印出错误的完整堆栈跟踪,而不仅仅是异常?例如,这段代码(尝试从 R 调用 Ambit2 化学信息学库)

smrkMan <- .jnew("ambit2.smarts.SMIRKSManager", dcob)
reaction <- .jcall(smrkMan, "Lambit2/smarts/SMIRKSReaction;", "parse", ">>C" )
res <-  .jcall(smrkMan, "Z", "applyTransformation", AC, 
             .jnull("ambit2/smarts/IAcceptable"),
             reaction)

只给我

Fehler in .jcall(smrkMan, "Z", "applyTransformation", AC,
.jnull("ambit2/smarts/IAcceptable"),  : 
java.lang.NullPointerException

这不是非常有用,我想看看它在哪一行失败,以便我可以返回并在源代码中跟踪它......

有没有可能?

【问题讨论】:

    标签: java r rjava


    【解决方案1】:

    您可以使用.jgetEx() 获取异常对象并打印堆栈跟踪:

    > .jcall("C",,"main",check=FALSE)
    > ex=.jgetEx()
    > .jcheck()
    Error: java.lang.Exception: foo
    > ex$printStackTrace()
    java.lang.Exception: foo
        at C.main(C.java:3)
    

    public class C {
      static void main() throws Exception {
      throw new Exception("foo"); } }
    

    请确保在调用printStackTrace() 之前调用.jclear().jcheck(),因为在您清除异常之前Java 不会执行任何操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 2018-11-14
      • 2019-03-05
      • 2014-08-20
      相关资源
      最近更新 更多