2017-07-11 135 views
1

我怎樣才能抑制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畢竟......現在的問題是:我怎麼能suppres的Java輸出到Rstudio R控制檯?如下所述,調用osmtile時可以這樣做嗎?

PS1:它爲osm,而不是osm-bw
PS2:我碰到這種通過

tile <- OpenStreetMap::osmtile(x=4389,y=2691,zoom=13,type="osm-bw") 

回答

0

排在我的情況下,像這樣的作品 - 被抑制空指針消息:

> 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 
    
+0

有了這個,我得到一個錯誤每秒一次我運行它,不管是否有'suppressMessages'或不... –

+0

沒問題。前進。 – mko