我们有一个在tomcat上运行的内部web应用程序,基于Spring构建。 Web应用程序前端是使用Flex构建的 我想创建一个跨平台的系统托盘应用程序,它允许进入应用程序的主页,并在服务器中发生某些事情时显示警报。
您认为最佳技术是什么:
的问候,
维姆
答案 0 :(得分:3)
如果您想继续使用Java,您有两种选择:
使用Swing / AWT。确保您使用的是Java 6及更高版本(您可以将其与您的应用程序一起安装),因为它支持系统托盘(来自API):
TrayIcon trayIcon = null;
if (SystemTray.isSupported()) {
// get the SystemTray instance
SystemTray tray = SystemTray.getSystemTray();
// load an image
Image image = Toolkit.getDefaultToolkit.getImage("");
// create a action listener to listen for default action executed on
// the tray icon
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
// execute default action of the application
// ...
}
};
// create a popup menu
PopupMenu popup = new PopupMenu();
// create menu item for the default action
MenuItem defaultItem = new MenuItem("");
defaultItem.addActionListener(listener);
popup.add(defaultItem);
// / ... add other items
// construct a TrayIcon
trayIcon = new TrayIcon(image, "Tray Demo", popup);
// set the TrayIcon properties
trayIcon.addActionListener(listener);
// ...
// add the tray image
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.err.println(e);
}
// ...
} else {
// disable tray option in your application or
// perform other actions
// ...
}
// ...
// some time later
// the application state has changed - update the image
if (trayIcon != null) {
trayIcon.setImage(updatedImage);
}
// ...
使用SWT / JFace。以下是一个示例(摘自here):
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
Image image = new Image(display, 16, 16);
final Tray tray = display.getSystemTray();
if (tray == null) {
System.out.println("The system tray is not available");
} else {
final TrayItem item = new TrayItem(tray, SWT.NONE);
item.setToolTipText("SWT TrayItem");
item.addListener(SWT.Show, new Listener() {
public void handleEvent(Event event) {
System.out.println("show");
}
});
item.addListener(SWT.Hide, new Listener() {
public void handleEvent(Event event) {
System.out.println("hide");
}
});
item.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
System.out.println("selection");
}
});
item.addListener(SWT.DefaultSelection, new Listener() {
public void handleEvent(Event event) {
System.out.println("default selection");
}
});
final Menu menu = new Menu(shell, SWT.POP_UP);
for (int i = 0; i < 8; i++) {
MenuItem mi = new MenuItem(menu, SWT.PUSH);
mi.setText("Item" + i);
mi.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
System.out.println("selection " + event.widget);
}
});
if (i == 0)
menu.setDefaultItem(mi);
}
item.addListener(SWT.MenuDetect, new Listener() {
public void handleEvent(Event event) {
menu.setVisible(true);
}
});
item.setImage(image);
}
shell.setBounds(50, 50, 300, 200);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
image.dispose();
display.dispose();
}
答案 1 :(得分:1)
使用Adobe AIR和BlazeDS或LCDS,您可以轻松构建此类应用程序。
答案 2 :(得分:0)
我会选择FreePascal。它本身编译为windows / mac / linux,因此你不依赖于任何其他框架(.net,java,air)来安装。只需一个可执行文件就可以了。
答案 3 :(得分:0)
我同意James:如果您在Flex中有投资和专业知识,那么使用Air扩展它是有意义的。
至于有效载荷 - 如果您只是需要不时“弹出”通知,RSS就是要走的路。否则,请使用类似XML REST的服务,因为它易于设置,从长远来看可以为您提供灵活性。