我正在使用库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
在阳光和开放式运行时环境中都会发生这种情况。我也尝试过以客户端和cacao的身份运行虚拟机,但在客户端中,问题是相同的,但是在cacao中,虚拟机没有崩溃,但对与图标的任何交互均未做出适当的 react 。当我使用参数-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中显示的白色背景的方法,将不胜感激。
编辑
我发现问题出在我导出jar文件的方式上。当我在eclipse jar导出中选择时:
要么
我能够与该图标正确交互。我仍然不确定是什么问题,因为我认为链接仍然会表现出与JAR内部或外部相同的独立库。
这是 eclipse 包装中的错误还是其他问题?
干杯
最佳答案
从http://www.gnu.org/software/libc/manual/html_node/Program-Error-Signals.html引用->:当程序试图在为其分配的内存之外进行读取或写入,或写入只能读取的内存时,将生成此信号。 (实际上,信号仅在程序进入足够远的距离以至于被系统的内存保护机制检测到时才会出现。)该名称是“违反分段”的缩写。
获取SIGSEGV条件的常见方法包括取消引用空指针或未初始化的指针,或者在使用指针单步访问数组但无法检查数组结尾时使用的指针。取消引用空指针是生成SIGSEGV还是SIGBUS,这在系统之间有所不同