rJava:如何获得堆栈跟踪/更详细的错误?

时间:2015-12-07 11:15:27

标签: java r rjava

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

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

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

有可能吗?

1 个答案:

答案 0 :(得分:2)

您可以使用.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"); } }

请确保在致电.jclear()之前致电.jcheck()printStackTrace(),因为在您清除异常之前,Java不会做任何事情。