以这个简单的例子为例:
public class Main
{
public static void main(String[] args) throws Exception
{
Runtime.getRuntime().exec("sleep 1000");
// This is just so that the JVM does not exit
Thread.sleep(1000 * 1000);
}
}
我正在使用openjdk6在Linux上运行这个程序。如果我试图向“睡眠”进程发送一个SIGQ
我在JNI中使用C++作为我的母语,我能够创建(c++)共享库,并且能够在共享库的帮助下调用java函数。
在我的过程中涉及的步骤:
1)使用JNI_CreateJavaVm.IN C++创建VM
2)使用创建的VM进行处理。
3)从线程中退出
如果我再次执行相同的过程,JNI_CreateJavaVm不会创建任何VM,它将返回JNI错误代码为-1 (未知错误).Then,我检查getCreatedJavaVM返回的返回值为0,而我试图使GetEnv崩溃。
我也尝试了函数GetJavaVM,但是它会因为错误消息而崩溃,
#
# A fatal error has been detected b
我有如此简单的java应用程序,它只需创建一个对象,并在无限循环中调用一个函数。
public class h {
public static void main( String[] args) {
while(true) {
B b = new B();
b.print();
}
}
}
class B {
public void print() {
System.out.println("Hello I'am class B");
}
我在同时调用Parallel::ForkManager和Inline::Java时遇到问题。具体地说,如果我使用JNI => 1选项调用Inline::Java (我必须这样做),那么派生进程就不会返回到父进程。代码如下:
use Parallel::ForkManager;
##### Calling Inline::Java #####
use Inline Java => <<END, JNI => 1;
END
###### End of Inline::Java #####
my $pm = Parallel::ForkManager->ne
我测试了一个简单的hello行来测试JPype:
Jpype.java.lang.System.out.println(“你好世界”)
它在“主”python程序的上下文中工作得很好。但是,在正在运行的线程的上下文中,我得到了以下响应:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f5272aeb226, pid=7888, tid=139991902578432
#
# JRE version: 7.0_01-b08
# Java VM