Exception handling
Exceptions.RdR handling of java exception
Details
Java exceptions are mapped to R conditions that are relayed by the
stop function.
The R condition contains the actual exception object as the
jobj item.
The class name of the R condition is made of a vector of simple java class names, the class names without their package path. This allows the R code to use direct handlers similar to direct exception handlers in java. See the example below.
Examples
#> Error in .jinit(): Unable to create a Java class loader.
Integer <- J("java.lang.Integer")
#> Error in .jfindClass(as.character(class), class.loader = class.loader): java.lang.NoClassDefFoundError: RJavaClassLoaderjclassName(class, class.loader = class.loader)new("jobjRef", jobj = <pointer: 0x590bf6c97f0a>, jclass = "java/lang/NoClassDefFoundError")
tryCatch( Integer$parseInt( "10.." ), NumberFormatException = function(e){
e$jobj$printStackTrace()
} )
#> Error: object 'Integer' not found
# the dollar method is also implemented for Throwable conditions,
# so that syntactic sugar can be used on condition objects
# however, in the example below e is __not__ a jobjRef object reference
tryCatch( Integer$parseInt( "10.." ), NumberFormatException = function(e){
e$printStackTrace()
} )
#> Error: object 'Integer' not found
#> Error: object 'Integer' not found