[][src]Struct jni_glue::VM

#[repr(transparent)]
pub struct VM(_);

FFI: Use &VM instead of *const JavaVM. This represents a global, process-wide Java exection environment.

On Android, there is only one VM per-process, although on desktop it's possible (if rare) to have multiple VMs within the same process. While this library does not yet support having multiple VMs active simultaniously, please don't hesitate to file an issue if this is an important use case for you.

This is a "safe" alternative to jni_sys::JavaVM raw pointers, with the following caveats:

  1. A null vm will result in undefined behavior. Java should not be invoking your native functions with a null *mut JavaVM, however, so I don't believe this is a problem in practice unless you've bindgened the C header definitions elsewhere, calling them (requiring unsafe), and passing null pointers (generally UB for JNI functions anyways, so can be seen as a caller soundness issue.)

  2. Allowing the underlying JavaVM to be modified is undefined behavior. I don't believe the JNI libraries modify the JavaVM, so as long as you're not accepting a *mut JavaVM elsewhere, using unsafe to dereference it, and mucking with the methods on it yourself, I believe this "should" be fine.

Methods

impl VM[src]

pub fn as_java_vm(&self) -> *const JavaVM[src]

pub unsafe fn from_jni_local(vm: &JavaVM) -> &VM[src]

pub fn with_env(&self, callback: impl FnOnce(&Env))[src]

Trait Implementations

impl Send for VM[src]

impl Sync for VM[src]

Auto Trait Implementations

impl Unpin for VM

impl UnwindSafe for VM

impl RefUnwindSafe for VM

Blanket Implementations

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]