After starting the app, check that the READ_CONTACTS is revoked or revoke it with adbe
adbe permissions revoke net.ashishb.jstojavademo contacts
This is worse than crashes. crashes at least give the app a chance to get out of a bad state.
Sending error information across languages is hard. At the bare minimum, every such call should be encapsulated with a try-catch which catches Exception. For severe unexpected errors, it might not be bad to let the app crash, as you would, while writing the Java code.
Full code for this blog post is posted on Github