2017-07-11 2 views
1

Comment puis-je supprimer la sortie rJava sur la console dans l'exemple suivant?Suppression de la sortie d'erreur rjava dans la console

library(rJava) 
TC <- J("edu.cens.spatial.RTileController") 
     dummy <- capture.output(suppressWarnings(suppressMessages(
res <- TC$getInstance(type="osm-bw")$getTileValues(4389,2691,13) 
     ))) 

Malgré capture.output, je reçois encore ce qui suit dans la console:

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) 

Modifier: En pur R Console (sans rstudio), je reçois pas de messages (mais je dois appeler library("OpenStreetMap") premier). Donc, cela pourrait être un problème Rstudio après tout ... La question est maintenant: comment puis-je suppres Java sortie à la console R dans Rstudio? Est-il possible de faire cela en appelant osmtile comme indiqué ci-dessous? PS1: Fonctionne avec osm au lieu de osm-bw.
PS2: Je suis tombé sur cette via

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

Répondre

0

Dans mon cas, quelque chose comme ça fonctionne - un message NullPointer est supprimé:

> 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")) 

Pour reproduire ce code ne suivant:

  1. Créer un fichier (de à 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. Compile code java (cmd/terminal, dernière ligne ne fonctionnera pas sur les fenêtres)

    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. intérieur 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

Avec cela, je reçois une erreur chaque seconde le temps que je l'exécute, indépendamment du fait qu'il y ait 'suppressMessages' ou pas ... –

+0

Pas de problème. Aller de l'avant. – mko