如何在以下示例中禁止将 rJava
输出到控制台?
library(rJava)
TC <- J("edu.cens.spatial.RTileController")
dummy <- capture.output(suppressWarnings(suppressMessages(
res <- TC$getInstance(type="osm-bw")$getTileValues(4389,2691,13)
)))
尽管有 capture.output
,我仍然在控制台中看到以下内容:
java.lang.NullPointerException
at edu.cens.spatial.RTileController.getTileValues(RTileController.java:109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at RJavaTools.invokeMethod(RJavaTools.java:386)
编辑:在纯 R 控制台(没有 Rstudio)中,我没有收到任何消息(但我必须首先调用 library("OpenStreetMap")
)。所以这可能是 Rstudio 的问题...现在的问题是:如何在 Rstudio 中抑制 Java 输出到 R 控制台?在调用 osmtile
时是否可以执行此操作,如下所述?
PS1:它适用于 osm
而不是 osm-bw
。
PS2:我通过
tile <- OpenStreetMap::osmtile(x=4389,y=2691,zoom=13,type="osm-bw")
最佳答案
就我而言,类似这样的方法有效 - NullPointer 消息被抑制:
> s <- .jcall(obj, returnSig="V", method="nullcall")
Error in .jcall(obj, returnSig = "V", method = "nullcall") :
java.lang.NullPointerException: Exception
> suppressMessages(s <- .jcall(obj, returnSig="V", method="nullcall"))
要重现此代码,请执行以下操作:
创建文件(从 R 内部)
dir.create("utils") dir.create("target") cat('package utils; public class RUsingStringArray { public void nullcall() throws NullPointerException { throw new NullPointerException("Exception"); } public static void main(String [] arg) { RUsingStringArray obj = new RUsingStringArray(); obj.nullcall(); } }', file="utils/RUsingStringArray.java")
编译java代码(在cmd/终端中,最后一行在Windows上不起作用)
javac -d target utils/*.java java -cp target utils/RUsingStringArray Exception in thread "main" java.lang.NullPointerException: Exception at utils.RUsingStringArray.nullcall(RUsingStringArray.java:19) at utils.RUsingStringArray.main(RUsingStringArray.java:24) export CLASSPATH=`pwd`/target
R 内部
library(rJava) .jinit("C:/path_to_folder/target") # leave empty if CLASSPATH was set obj <- .jnew("utils.RUsingStringArray") s <- .jcall(obj, returnSig="V", method="nullcall") suppressMessages(s <- .jcall(obj, returnSig="V", method="nullcall")) Error in .jcall(obj, returnSig = "V", method = "nullcall") : java.lang.NullPointerException: Exception
关于java - 抑制控制台中的 rjava 错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45041762/