JVM在eclipse中运行,在SIGSEGV外部崩溃

时间:2012-01-15 22:54:36

标签: java linux eclipse jvm sigsegv

我正在使用库native-tray-adapter,这需要库jni-utils-1.0来确保Ubuntu中的图标没有透明背景。

我的程序创建一个带有关闭菜单项的菜单,关闭程序。当我在eclipse中运行程序时它工作正常,我可以毫无问题地与图标进行交互。当我将文件导出到可运行的jar时,java虚拟机在我尝试关闭程序时崩溃,程序能够通过右键单击显示菜单,但是单击菜单会导致崩溃。

# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0xb6d3f746, pid=6193, tid=2121870192

这在sun和开放运行时环境中都会发生。我也尝试将虚拟机作为客户端和可可运行,在客户端问题是相同的,但是在可可虚拟机没有崩溃但它没有对与图标的任何交互做出正确反应。

当我使用参数-Xcheck运行虚拟机时:jni我收到错误消息:

WARNING in native method: JNI call made with exception pending
FATAL ERROR in native method: Bad global or local ref passed to JNI
Aborted

我认为问题在于jni-utils库但是我不明白为什么eclipse能够毫无问题地运行程序然后它在环境之外崩溃。

我已经在eclipse中检查了虚拟机的目录> help>关于>安装细节>配置,这与命令的目录匹配

$ which java

一些额外的细节

os: ubuntu 11.10 
eclipse version: 3.7.0 
eclipse library: java6-openjdk 
java version: "1.6.0_26"

如果需要更多信息,请随时询问。有错误日志但是我不知道它会有多大帮助以及我需要发布哪些部分。

为什么会发生这种情况的任何帮助,一种使虚拟机与eclipse相同的方法,或者使用标准Java TrayIcon删除ubuntu中显示的白色背景的另一种方法,将不胜感激。< / p>

修改

我发现问题在于我导出jar文件的方式。当我在eclipse jar中选择导出时:

  1. 将所需的库提取到生成的JAR中

  2. 将所需的库复制到生成的JAR旁边的子文件夹

  3. 我能够正确地与图标进行交互。我仍然不确定问题是什么,因为我认为链接仍然会在JAR内部或外部打包相同的独立库。

    这是eclipse包装中的错误还是有其他问题?

    欢呼声

1 个答案:

答案 0 :(得分:-1)

引用http://www.gnu.org/software/libc/manual/html_node/Program-Error-Signals.html - &gt;:
当程序试图在为其分配的内存之外读取或写入时,或者写入只能读取的内存时,会生成此信号。 (实际上,只有当程序远远超出系统的内存保护机制才能检测到信号时才会出现信号。)名称是“分段违规”的缩写。

获取SIGSEGV条件的常用方法包括取消引用null或未初始化的指针,或者当您使用指针逐步执行数组时,但无法检查数组的结尾。它取决于系统,取消引用空指针生成SIGSEGV或SIGBUS