Java ProcessBuilder不显示SystemTray

Java ProcessBuilder不显示SystemTray,java,tomcat,processbuilder,system-tray,Java,Tomcat,Processbuilder,System Tray,我有两个Java应用程序: 1在Apache Tomcat 7.0上运行的web应用程序。 2在后台运行的控制台应用程序。在此应用程序中,我使用SystemTray图标通知用户应用程序正在运行。我用一个程序把这个jar转换成一个.exe。exe运行jar 我想在每次有人访问web应用程序时启动console应用程序。为此,我使用了ProcessBuilder 控制台应用程序在以下情况下工作正常: 从Eclipse执行时; 从可运行的jar执行时; 当web应用程序从Eclipse启动时。 当我直

我有两个Java应用程序:

1在Apache Tomcat 7.0上运行的web应用程序。 2在后台运行的控制台应用程序。在此应用程序中,我使用SystemTray图标通知用户应用程序正在运行。我用一个程序把这个jar转换成一个.exe。exe运行jar

我想在每次有人访问web应用程序时启动console应用程序。为此,我使用了ProcessBuilder

控制台应用程序在以下情况下工作正常:

从Eclipse执行时; 从可运行的jar执行时; 当web应用程序从Eclipse启动时。 当我直接使用ApacheTomcat运行web应用程序时,控制台应用程序的SystemTray不会显示。控制台应用程序工作正常,但未创建图标

以下是web应用程序上使用的ProcessBuilder的代码:

try {
    ProcessBuilder processBuilder;
    processBuilder = new ProcessBuilder("C:\\Core\\core.exe");
    processBuilder.redirectErrorStream(true);
    processBuilder.directory(new File("C:\\Core"));
    Process process = processBuilder.start();
} catch (Exception ex) {
    ex.printStackTrace();
}
以下是控制台应用程序的代码,我在其中创建了SystemTray:

SystemTray systemTray = SystemTray.getSystemTray();
Image image = new ImageIcon("img/tray-on.png").getImage();
PopupMenu popupMenu = new PopupMenu();

MenuItem itemStart = new MenuItem("Start");
itemStart.setEnabled(false);
itemStart.addActionListener(listenerStart);
MenuItem itemStop = new MenuItem("Stop");
itemStop.addActionListener(listenerStop);
MenuItem itemLog = new MenuItem("Log");
itemLog.addActionListener(listenerLog);
MenuItem itemClose = new MenuItem("Close");
itemClose.addActionListener(listenerClose);
popupMenu.add(itemStart);
popupMenu.add(itemStop);
popupMenu.add(itemLog);
popupMenu.add(itemClose);

trayIcon = new TrayIcon(image, "Core is Running");
trayIcon.setPopupMenu(popupMenu);
trayIcon.setImageAutoSize(true);

try {
    systemTray.add(trayIcon);
} catch (AWTException ex) {
    logger.fatal(ex.getMessage());
}
Launcher.getInstance().start();
编辑:


谢谢各位。感谢您的帮助。

new-ImageIconimg/tray-on.png假定存在相对于当前目录的img目录。由于ProcessBuilder将子进程的当前目录设置为C:\Core,因此ImageIcon构造函数希望找到C:\Core\img\tray-on.png。验证该位置是否存在文件。感谢回复。是,文件存在。如果进程试图打印到标准输出或标准错误,则进程可能会阻塞。尝试添加processBuilder.Inheritario;或者processBuilder.redirectOutputProcessBuilder.Redirect.INHERIT;。我两次都试了,结果都一样。我在帖子里加了一张照片。希望能有帮助。谢谢。@VGR您建议processBuilder.Inheritario,为我结束了数小时的调试;