java - 抑制控制台中的 rjava 错误输出

标签 java r rstudio rjava

如何在以下示例中禁止将 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"))

要重现此代码,请执行以下操作:

  1. 创建文件(从 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")
    
  2. 编译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
    
  3. 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/

相关文章:

java - 为整个 Activity 禁用触摸

r - 识别和修改数据框中的列表列单元格

将面板数据宽格式 reshape 为长格式

javascript - 如何在打包的 Shiny 应用程序中引用 JS 文件中的图像?

r - 如何让RStudio使用R语言设置?

RStudio:将代码移至编辑器中心

r - 错误 : Python module 'cleannlp' not found. 安装:pip install cleannlp in R

java - 想要使用 Java 和 Flex 从数据库中提取数据

java - 如何从 firebase 检索数据并输入到 csv

java - 如果我将 .svn 目录从 ASCII 转换为 UTF-8 会怎样?