Java exception handling
.jcheck checks the Java VM for any pending exceptions and
.jthrow throws a Java exception.
.jgetEx polls for any pending expections and returns the exception object.
.jclear clears a pending exception.
.jcheck(silent = FALSE)
.jthrow(exception, message = NULL) .jgetEx(clear = FALSE) .jclear()
- If set to
FALSEthen Java is instructed to print the exception on
stderr. Note that Windows Rgui doesn't show
stderrso it will not appear there (as of rJava 0.5-1 some errors that the JVM prints using th
- is either a class name of an exception to create or a throwable object reference that is to be thrown.
exceptionis a class name then this parameter specifies the string to be used as the message of the exception. This parameter is ignored if
exceptionis a reference.
- if set to
TRUEthen the returned exception is also cleared, otherwise the throwable is returned without clearing the cause.
Please note that some functions (such as
.jcheck implicitly unless
instructed to not do so. If you want to handle Java exceptions, you
should make sure that those function don't clear the exception you may
want to catch.
The exception handling is still as a very low-level and experimental,
because it requires polling of exceptions. A more elaboate system
using constructs similar to
catch is planned for
next major version of
Warning: When requesting exceptions to not be cleared
automatically, please note that the
show method (which is
.jgetEx can be stored, but should not be printed
(or otherwise used in Java calls) until after the exception is
cleared. In general, all Java calls will fail (possibly silently)
until the exception is cleared.
TRUEif an exception occurred or
NULLif there are no pending exceptions or an object of the class "java.lang.Throwable" representing the current exception.
# we try to create a bogus object and # instruct .jnew to not clear the exception # this will raise an exception v <- .jnew("foo/bar", check=FALSE) # you can poll for the exception, but don't try to print it # (see details above) if (!is.null(e<-.jgetEx())) print("Java exception was raised") # expect TRUE result here because the exception was still not cleared print(.jcheck(silent=TRUE)) # next invocation will be FALSE because the exception is now cleared print(.jcheck(silent=TRUE)) # now you can print the actual expection (even after it was cleared) print(e)