2009-06-16 3 views
2

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

Что бы вы думаете, это лучшая технология для:

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

С уважением,

Wim

+0

Что бы целевая версия JRE? v.6 имеет обширную поддержку systray. Я бы попросил systray опросить статусную страницу с помощью соскабливания. (потому что это просто, и он будет работать): D –

ответ

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(); 
    } 
    
+0

У меня обширный опыт Swing, но нет опыта SWT. Было бы целесообразно перейти на SWT для этого? –

+0

С технологической точки зрения, нет. Насколько я понимаю, все, что вам нужно, - это небольшое приложение мониторинга для вашего сервера. Я не считаю, что изучение новых технологий именно для этого будет лучшим использованием вашего времени (если вы не хотите использовать его в качестве образовательного проекта). –

1

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

+0

Да, но я забыл о важном требовании. Систему также следует запустить произвольное приложение. Я прочитал, что вы не можете запускать приложение из AIR из-за ограничений в песочнице. –

+1

Может быть, что-то вроде Мерапи поможет? –

+0

Спасибо за это, кажется интересным. Это ссылка, если люди задаются вопросом: http://merapiproject.net/ –

0

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

+2

Ну, а «всего один исполняемый файл для каждой платформы, которую вы хотите поддержать», и, возможно, один набор источников, а также собственные API для systray значки - все, кроме стандартизированных. – Fredrik

0

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

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

+0

Спасибо за ввод. Я надеюсь получить еще несколько ответов на сообщение между сервером и частью systray. –

+0

Помогли бы какие-либо дополнения к моему ответу? Дополнительная информация о ваших потребностях поможет. –

+0

Да, что вы подразумеваете под XML REST, как сервис? Есть ли какие-нибудь вещи весной или любая другая библиотека, которая поможет в этом? –

Смежные вопросы