我正在使用库native-tray-adapter ,它需要库jni-utils-1.0来确保Ubuntu中的图标没有透明的背景。
我的程序创build一个closures菜单项closures程序。 当我在eclipse中运行该程序时,它工作正常,我可以与图标交互没有任何问题。 当我将文件导出到可运行jar文件时,当我尝试closures程序时,java虚拟机崩溃,程序能够右键单击显示菜单,但是单击菜单会导致崩溃。
# A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0xb6d3f746, pid=6193, tid=2121870192
这发生在sun和open运行时环境中。 我也尝试运行虚拟机作为客户端和cocoa,在客户端的问题是一样的,但在cocoa虚拟机没有崩溃,但它没有反应与图标的任何交互。
当我用参数-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> about> installation details> configuration中检查了虚拟机的目录,并且这个命令的目录是匹配的
$ which java
一些额外的细节
os: ubuntu 11.10 eclipse version: 3.7.0 eclipse library: java6-openjdk java version: "1.6.0_26"
如果需要更多信息,请随时询问。 有错误日志,但是我不知道这将是多么有用,我需要发布什么部分。
任何帮助,为什么这可能会发生,一种使虚拟机等同于日食的方法,或另一种方法来删除使用标准的Java TrayIcon在Ubuntu中显示的白色背景,将不胜感激。
编辑
我发现问题在于我导出jar文件的方式。 当我在eclipse jar导出中select:
将所需的库提取到生成的JAR中
要么
将所需的库复制到生成的JAR旁边的子文件夹中
我能够正确地与图标交互。 我仍然不确定是什么问题,因为我认为链接仍然会performance出相同的独立库打包在JAR内部或外部。
这是eclipse包装中的错误还是有其他一些问题?
干杯
从http://www.gnu.org/software/libc/manual/html_node/Program-Error-Signals.html引用 – >:
当程序尝试读取或写入为其分配的内存之外或者写入只能读取的内存时,会生成此信号。 (实际上,只有当程序运行得足够远才能被系统的内存保护机制检测到时,信号才会出现)。这个名称是“分割违例”的缩写。
获取SIGSEGV条件的常见方法包括取消引用空指针或未初始化的指针,或者当您使用指针来遍历数组,但未能检查数组的末尾时。 不同的系统是否取消引用空指针会生成SIGSEGV或SIGBUS