JRE中的致命错误

时间:2013-09-29 13:02:47

标签: java c++ java-native-interface

我正在开发一个应用程序,并决定将java更新为java7。执行此操作并将适当的值设置为env。变量$ PATH和$ JAVA_HOME,我收到以下错误:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f19addeaa34, pid=28052, tid=139748278572864
#
# JRE version: Java(TM) SE Runtime Environment (7.0_40-b43) (build 1.7.0_40-b43)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.0-b56 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.so+0x644a34]  get_method_id(JNIEnv_*, _jclass*, char const*, char const*, bool, Thread*)+0x84
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#

感谢任何帮助。

更新:Java和JavaC:

java -version
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

javac -version
javac 1.7.0_40

1 个答案:

答案 0 :(得分:0)

当您调用NULL时,您正在将clazz作为GetMethodID参数传递,因此程序在尝试运行该方法时会收到SEGV信号。发生这种情况可能是因为在您之前加载它时找不到您正在使用的类,并且您没有进行错误检查以检测它。所以:

  1. 添加错误检查,以便您知道是否无法加载要使用的类。如果您使用FindClass函数,请检查它是否返回NULL。
  2. 找不到类,可能是因为它不在类搜索路径上。检查在运行程序时是否需要设置CLASSPATH环境变量,或者在创建JVM时是否需要设置java.class.path系统属性。