- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Java 应用程序,它在系统托盘中放置一个带有右键菜单的图标。当我从 IDE (NetBeans) 运行它时,它可以正常工作。但是当我构建它并运行 JAR 文件时,它会将图标放入系统托盘中,但当我右键单击它时,它没有上下文菜单。
这是一些代码。任何帮助表示赞赏。我检查了Java的平台版本和控制台版本,它们似乎都是相同的。
package abaxis;
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class Systray
{
private TrayIcon trayIcon = null;
private Image databaseimage;
private Image databaseDisconnectedImage;
public PopupMenu popup;
private ActionListener exitListener;
private ActionListener settingsListener;
private ActionListener connectListener;
private ActionListener disconnectListener;
private static Systray instance;
private static Abaxis abaxis = null;
private SystemTray tray;
private MenuItem connectItem;
private MenuItem settingsItem;
private MenuItem exitItem;
private MenuItem disconnectItem;
public Systray()
{
// create a action listener to listen for default action executed on the tray icon
exitListener = new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
};
settingsListener = new ActionListener() {
public void actionPerformed(ActionEvent e)
{
//New Jframe.
JFrame settingsJFrame = new AbaxisSettingsForm();
settingsJFrame.setVisible(true);
}
};
connectListener = new ActionListener() {
public void actionPerformed(ActionEvent e)
{
//Start the application.
abaxis.connect();
setConnectedItems();
}
};
disconnectListener = new ActionListener() {
public void actionPerformed(ActionEvent e)
{
//Discconect the application.
abaxis.disconnect();
setDisconnectedItems();
}
};
}
public static Systray getSystray()
{
if(instance == null)
{
instance = new Systray();
instance.init();
}
return instance;
}
public void init()
{
// get the SystemTray instance
tray = SystemTray.getSystemTray();
// load Images
databaseimage = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/database.png"));
databaseDisconnectedImage = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/database_delete.png"));
// create a popup menu
this.popup = new PopupMenu();
// create menu item for the default action
connectItem = new MenuItem("Connect");
connectItem.addActionListener(connectListener);
settingsItem = new MenuItem("Settings");
settingsItem.addActionListener(settingsListener);
exitItem = new MenuItem("Exit");
exitItem.addActionListener(exitListener);
disconnectItem = new MenuItem("Disconnect");
disconnectItem.addActionListener(disconnectListener);
// set the TrayIcon properties
//trayIcon.addActionListener(exitListener);
// construct a TrayIcon
trayIcon = new TrayIcon( databaseimage, "Abaxis", this.popup );
// add the tray image
try
{
tray.add(trayIcon);
}
catch (AWTException e)
{
System.err.println(e);
}
try
{
abaxis = Abaxis.start();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
if(abaxis.isConnected())
{
//Set all the stuff if its connected.
setConnectedItems();
}
else
{
//Set all the stuff if its disconnected.
setDisconnectedItems();
}
}
private void setConnectedItems()
{
this.popup.removeAll();
this.popup.add(disconnectItem);
this.popup.add(settingsItem);
this.popup.add(exitItem);
this.updateImage(databaseimage);
}
private void setDisconnectedItems()
{
this.popup.removeAll();
this.popup.add(connectItem);
this.popup.add(settingsItem);
this.popup.add(exitItem);
this.updateImage(databaseDisconnectedImage);
}
public void updateImage(Image x)
{
if (this.trayIcon != null)
{
this.trayIcon.setImage(x);
}
}
}
谢谢,我设法发现这是一个丢失 jar 的问题。但 jar 文件似乎位于 lib 文件夹中。所以我不知道为什么它有一个翅膀。堆栈跟踪:
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:123)
at abaxis.Abaxis.connectToBloodMachine(Abaxis.java:114)
at abaxis.Abaxis.connect(Abaxis.java:90)
at abaxis.Abaxis.init(Abaxis.java:76)
at abaxis.Abaxis.start(Abaxis.java:53)
at abaxis.Systray.init(Systray.java:141)
at abaxis.Systray.getSystray(Systray.java:88)
at abaxis.Abaxis.main(Abaxis.java:279)
最佳答案
RXTX 与依赖于其运行的操作系统的驱动程序配合使用。这些驱动程序随 RXTX 库一起提供,它们是:
librxtxSerial.so
和 librxtxParallel.so
(适用于 Linux)。librxtxSerial.dll
和 librxtxParallel.dll
(适用于 Windows)。librxtxSerial.jnilib
适用于 MacThis link有正确安装这些驱动程序的说明和这个问题:java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path有几种解决方法可以解决此类异常。
但是,它们都假设您有权访问 %JAVA_HOME% 路径,或者您知道驱动程序所在的位置,如果您在计算机上工作,这很好,但如果您需要分发应用程序,则不行。如果是这种情况,只需将驱动程序文件复制到放置 jar
的同一文件夹中即可。您必须看到类似这样的内容才能知道它正常工作:
Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
最近我注意到 Linux 的 java.library.path
属性中不包含当前工作目录。因此,如果您只是将 librxtxSerial.so
添加到应用程序文件夹中,您仍然会收到 UnsatisfiedLinkError
。再次,您可以在通过命令行运行应用程序时设置此属性,如下所示:
java -jar -Djava.library.path=/path/to/lib
或者您可以使用此处解释的 hacky 方法:Setting "java.library.path" programmatically 。这种方法不安全,如果您有权实现另一种解决方法,我不建议您使用它,但我已经尝试过并且它有效:
String javaLibraryPath = System.getProperty("java.library.path");
if(!javaLibraryPath.contains(File.pathSeparator + "." + File.pathSeparator)){
StringBuilder sb = new StringBuilder(javaLibraryPath).append(File.pathSeparator).append(".");
// The line above appends "." (current directory) to the library path
// Of course 'rxtxSerial.so' must be placed in the current directory
System.setProperty("java.library.path", sb.toString());
try {
Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);// Setting this field to null will force a reevaluation of
// the library path as soon as loadLibrary() is called
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex) {
ex.printStackTrace();
}
}
关于java - 运行 JAR 文件时右键菜单损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19849558/
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我目前正在尝试制作一个非常简单的应用程序,它会根据一天中的时间问候。我的代码是: open System let read() = Console.Read() let readLine() = Co
我已经运行Elasticsearch服务很长时间了,但是突然遇到了以下情况 由以下原因导致:org.elasticsearch.index.translog.TranslogCorruptedExce
我对执行以下操作的 php 重定向脚本有一个奇怪的问题: 在用户的浏览器中植入 Cookie,或者读取现有 Cookie(如果有)。 将用户重定向到另一个网址(重定向的网址是原始网址中的参数,例如 h
我正在使用 iText 7.0.0(Java 风格),似乎表格单元格 HorizontalAlignment 被忽略,因为 CENTER 和 RIGHT 都不起作用。你能重现这个吗? see th
简而言之: 我有一个可以从多个线程访问的计数器变量。尽管我已经实现了多线程读/写保护,但该变量似乎仍然以不一致的方式同时写入,导致计数器结果不正确。 深入杂草: 我使用的“for 循环”会在后台触发大
我有一个 REST 项目,在访问控制服务类中保存用户的ArrayList。一切都工作正常,直到 REST Web 服务突然抛出 java.util.NoSuchElementException。单步查
已关闭。此问题不符合Stack Overflow guidelines 。它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
当我刷新页面时,我无法显示 voteUp/Down,因为如果我执行 voteUp/Down(+1 或 -1) 并刷新页面,这会再次返回 voteUp/Down (0)。过去我使用 JSON,但社区推荐
我正在为离散时间 CPU 调度模拟器编写代码。它只是生成流程并相应地安排它们。我目前正在实现 FCFS 计划。我理解离散时间模拟器的本质,但我在用 C++ 实现时遇到了麻烦。 问题出现在handleN
尝试使用 yum 部署包时出现错误: 2016-07-07 14:14:31,296 - ERROR - error: rpmdb: BDB0113 Thread/process 6723/1
我有一个简单的同步队列 template class SynchronisedQueue { public: void Enqueue(const T& d
我正在使用 hadoop 0.20.append 和 hbase 0.90.0。我将少量数据上传到 Hbase,然后出于评估目的杀死了 HMaster 和 Namenode。在此之后,我向 Hbase
我使用 symfony 框架 1.4 创建了一个网站。我正在使用 sfguard 进行身份验证。 现在,这在 WAMP (windows) 上运行良好。我可以在不同的浏览器上登录多个帐户并使用该网站。
目前我已经实现了 HashMap private static Map cached = new HashMap(); 和 Item 是一个具有属性的对象 Date expireTime 和 byte
我试图将 2 个不同的 WPF 控件绑定(bind)到 ViewModel 中的同一属性,即 CheckBox.IsChecked 和 Expander.IsExpanded。我想要实现的行为是让 C
我希望这是一个简单的问题,但我没有找到答案。 我想让 build.gradle 文件通过替换某些变量来设置我的 Spring Boot 应用程序中的版本。这与广告一样有效: def tokens =
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
这个问题在这里已经有了答案: In a fragment shader, why can't I use a flat input integer to index a uniform array o
我已经下载了 OSM 世界地图。解析时出现异常: osm bound changeset (...) changeset Exception in thread "main" org.xml.sax.
我是一名优秀的程序员,十分优秀!