示例#1
0
        public static unsafe void Main(string[] args)
        {
            JreRuntime.Initialize("/usr/lib/jvm/java-11-openjdk-amd64/lib/server/libjvm.so");
            Console.WriteLine("Hello World!");
            bool       hosted = false;
            JniRuntime vm     = null;

            try
            {
                vm     = JniRuntime.CurrentRuntime;
                hosted = vm != null;
            }
            catch (InvalidOperationException e)
            {
                Console.WriteLine(e);
            }

            ListInvocationPoints("PRE");

            if (vm == null)
            {
                vm = new JreRuntimeOptions().CreateJreVM();
            }

            TryExplicitlyCallJni();
            ListInvocationPoints("WITHIN");
            TryImplicitlyInteroperate();

            if (!hosted)
            {
                vm.Dispose();
            }
            ListInvocationPoints("POST");
        }
 public void JDK_OnlySupportsOneVM()
 {
     try {
         var second = new JreRuntimeOptions().CreateJreVM();
         // If we reach here, we're in a JVM that supports > 1 VM
         second.Dispose();
         Assert.Ignore();
     } catch (NotSupportedException) {
     } catch (Exception e) {
         Assert.Fail("Expected NotSupportedException; got: {0}", e);
     }
 }
示例#3
0
        void CreateJavaVM(string jvmDllPath)
        {
            var builder = new JreRuntimeOptions {
                JvmLibraryPath = jvmDllPath,
            };

            try {
                builder.CreateJreVM();
            } catch (Exception e) {
                ErrorAndExit(Message.ErrorUnableToCreateJavaVM, Environment.NewLine, e);
            }
        }
示例#4
0
        void CreateJavaVM(string jvmDllPath)
        {
            var builder = new JreRuntimeOptions {
                JvmLibraryPath = jvmDllPath,
            };

            try {
                builder.CreateJreVM();
            } catch (Exception e) {
                Error($"Unable to create Java VM{Environment.NewLine}{e}");
                Environment.Exit(3);
            }
        }
示例#5
0
        public static void Main(string[] args)
        {
            string?jvmPath           = global::Java.InteropTests.TestJVM.GetJvmLibraryPath();
            bool   createMultipleVMs = false;
            bool   showHelp          = false;
            var    options           = new OptionSet()
            {
                "Using the JVM from C#!",
                "",
                "Options:",
                { "jvm=",
                  $"{{PATH}} to JVM to use.  Default is:\n  {jvmPath}",
                  v => jvmPath = v },
                { "m",
                  "Create multiple Java VMs.  This will likely creash.",
                  v => createMultipleVMs = v != null },
                { "h|help",
                  "Show this message and exit.",
                  v => showHelp = v != null },
            };

            options.Parse(args);
            if (showHelp)
            {
                options.WriteOptionDescriptions(Console.Out);
                return;
            }
            Console.WriteLine("Hello World!");
            var builder = new JreRuntimeOptions()
            {
                JniAddNativeMethodRegistrationAttributePresent = true,
                JvmLibraryPath = jvmPath,
            };

            builder.AddOption("-Xcheck:jni");
            var jvm = builder.CreateJreVM();

            Console.WriteLine($"JniRuntime.CurrentRuntime == jvm? {ReferenceEquals (JniRuntime.CurrentRuntime, jvm)}");
            foreach (var h in JniRuntime.GetAvailableInvocationPointers())
            {
                Console.WriteLine("PRE: GetCreatedJavaVMHandles: {0}", h);
            }

            CreateJLO();

            if (createMultipleVMs)
            {
                CreateAnotherJVM();
            }
        }
示例#6
0
        public static unsafe void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            try {
                var ignore = JniRuntime.CurrentRuntime;
            } catch (InvalidOperationException e) {
                Console.WriteLine(e);
            }
            foreach (var h in JniRuntime.GetAvailableInvocationPointers())
            {
                Console.WriteLine("PRE: GetCreatedJavaVMHandles: {0}", h);
            }
            Console.WriteLine("Part 2!");
            using (var vm = new JreRuntimeOptions().CreateJreVM()) {
                Console.WriteLine("# JniEnvironment.EnvironmentPointer={0}", JniEnvironment.EnvironmentPointer);
                Console.WriteLine("vm.SafeHandle={0}", vm.InvocationPointer);
                var t = new JniType("java/lang/Object");
                var c = t.GetConstructor("()V");
                var o = t.NewObject(c, null);
                var m = t.GetInstanceMethod("hashCode", "()I");
                int i = JniEnvironment.InstanceMethods.CallIntMethod(o, m);
                Console.WriteLine("java.lang.Object={0}", o);
                Console.WriteLine("hashcode={0}", i);
                JniObjectReference.Dispose(ref o);
                t.Dispose();
                // var o = JniTypes.FindClass ("java/lang/Object");

                /*
                 * var waitForCreation = new CountdownEvent (1);
                 * var exitThread = new CountdownEvent (1);
                 * var t = new Thread (() => {
                 *      var vm2 = new JavaVMBuilder ().CreateJavaVM ();
                 *      waitForCreation.Signal ();
                 *      exitThread.Wait ();
                 * });
                 * t.Start ();
                 * waitForCreation.Wait ();
                 */
                foreach (var h in JniRuntime.GetAvailableInvocationPointers())
                {
                    Console.WriteLine("WITHIN: GetCreatedJavaVMs: {0}", h);
                }
                // exitThread.Signal ();
            }
            foreach (var h in JniRuntime.GetAvailableInvocationPointers())
            {
                Console.WriteLine("POST: GetCreatedJavaVMs: {0}", h);
            }
        }
示例#7
0
        static JreRuntimeOptions CreateBuilder(string[] jars)
        {
            var dir = Path.GetDirectoryName (typeof (TestJVM).Assembly.Location);
            var builder = new JreRuntimeOptions () {
                JvmLibraryPath              = Environment.GetEnvironmentVariable ("JI_JVM_PATH"),
            };
            if (jars != null) {
                foreach (var jar in jars)
                    builder.ClassPath.Add (Path.Combine (dir, jar));
            }
            builder.AddOption ("-Xcheck:jni");
            builder.TypeManager                 = new JreTypeManager ();

            return builder;
        }
示例#8
0
    public static void Main()
    {
        var runtimeOptions = new JreRuntimeOptions()
        {
            JvmLibraryPath = Environment.GetEnvironmentVariable("JI_JVM_PATH"),
        };
        var    GlobalRuntime = runtimeOptions.CreateJreVM();
        IntPtr _env          = global::Java.Interop.JniEnvironment.EnvironmentPointer;

        SafeTiming(_env);
        XAIntPtrTiming(_env);
        JIIntPtrTiming(_env);
        JIPinvokeTiming(_env);

        GlobalRuntime.Dispose();
    }
示例#9
0
        static JreRuntimeOptions CreateBuilder(string[] jars)
        {
            var builder = new JreRuntimeOptions();

            if (jars != null)
            {
                foreach (var jar in jars)
                {
                    builder.ClassPath.Add(jar);
                }
            }
            builder.AddOption("-Xcheck:jni");
            builder.TypeManager = new JreTypeManager();

            return(builder);
        }
示例#10
0
        static JreRuntimeOptions CreateBuilder(string[] jars, Assembly caller)
        {
            var dir     = Path.GetDirectoryName(typeof(TestJVM).Assembly.Location);
            var builder = new JreRuntimeOptions()
            {
                JvmLibraryPath = GetJvmLibraryPath(),
                JniAddNativeMethodRegistrationAttributePresent = true,
                JniGlobalReferenceLogWriter = GetLogOutput("JAVA_INTEROP_GREF_LOG", "g-", caller),
                JniLocalReferenceLogWriter  = GetLogOutput("JAVA_INTEROP_LREF_LOG", "l-", caller),
            };

            if (jars != null)
            {
                foreach (var jar in jars)
                {
                    builder.ClassPath.Add(Path.Combine(dir, jar));
                }
            }
            builder.AddOption("-Xcheck:jni");
            builder.TypeManager = new JreTypeManager();

            return(builder);
        }
示例#11
0
        static JniRuntime CreateJavaVM()
        {
            var builder = new JreRuntimeOptions();

            return(builder.CreateJreVM());
        }