Какую технологию использовать для написания systray front-end в webapp? - PullRequest
2 голосов
/ 16 июня 2009

у нас есть внутреннее веб-приложение, работающее на tomcat, основанное на Spring. Интерфейс веб-приложения создается с помощью Flex.
Я хотел бы создать кроссплатформенное приложение systray, которое позволяет перейти на домашнюю страницу приложения и отображать оповещения, когда на сервере происходят определенные вещи.

Как вы думаете, что является лучшей технологией для:

  • Сам Систрей? Java Swing?
  • Связь между сервером и systray? Веб-сервис? Новостная лента? Весеннее удаленное место? Уведомления JMX?

С уважением,

Wim

Ответы [ 4 ]

3 голосов
/ 17 июня 2009

Если вы хотите остаться с 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 . Вот пример (взято из здесь ):

    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 голос
/ 16 июня 2009

С помощью Adobe AIR и BlazeDS или LCDS вы можете легко создавать приложения такого типа.

0 голосов
/ 16 июня 2009

Я согласен с Джеймсом : если у вас есть инвестиции и ноу-хау во Flex, имеет смысл расширить их с помощью Air.

Что касается полезной нагрузки - если вам просто нужно «всплывать» уведомления время от времени, то RSS - это путь. В противном случае сверните свой собственный XML-REST-сервис, так как его легко настроить и он даст вам гибкость в долгосрочной перспективе.

0 голосов
/ 16 июня 2009

Я бы пошел на FreePascal. Он изначально компилируется в windows / mac / linux, и поэтому вы не зависите от какой-либо другой платформы (.net, java, air), которая будет установлена. Всего один исполняемый файл и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...