La aplicación internamente era llamada "Widget" y consistía en una aplicación que se ejecutaría en el tray de Windows y mostraría mensajes de avisos cuando pasarán determinadas cosas (eventos de CCOW pero esta ya es un tema aparte), vamos, necesitaba algo parecido a los popups que aparecen cuando se conecta alguien a un programa de mensajería o se recibe un correo.
Ante mi inexperiencia en el tema (y mis ganas de hacerlo en Java) me pasé por JavaHispano esperando que algún guru iluminase mi camino, pero no obtuve ninguna respuesta.
Así que, después de mucho investigar descubrí Growl for Windows, y con suerte para mí disponía de un API para comunicarse utilizarlo desde Java (libgrowl). Así que al final, después de una larga búsqueda fuí capaz de generar algo relativamente curioso.
Aquí van un mini ejemplo de uso
public class WidgetTrayApp
{
TrayIcon trayIcon = null;
// Conexion con GROWL 4 Windows
GrowlConnector growl = new GrowlConnector("localhost");
// Creamos la aplicación
Application widgetHSAL = new Application("Widget HSAL", "http://localhost:8080/message_generator/img/barrilete.png");
// Tipos de notifaciones
NotificationType widgetStarted = new NotificationType("Widget iniciado");
NotificationType widgetFinished = new NotificationType("Widget finalizado");
NotificationType widgetInfo = new NotificationType("Información encontrada");
public WidgetTrayApp()
{
// Si existe tray generamos un icono en el tray que será nuestra
// aplicación
if (SystemTray.isSupported())
{
SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage("barrilete.gif");
// Registramos las notificaciones de nuestra aplicación
NotificationType[] notificationTypes = new NotificationType[] { widgetStarted, widgetFinished, widgetInfo };
growl.register(widgetHSAL, notificationTypes);
ActionListener exitListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// Notificacion de salida de la aplicación
Notification stopWidgetNotification = new Notification(widgetHSAL, widgetFinished, "¡Hasta la próxima!", "");
growl.notify(stopWidgetNotification);
System.exit(0);
}
};
PopupMenu popup = new PopupMenu();
MenuItem exitItem = new MenuItem("Salir");
exitItem.addActionListener(exitListener);
popup.add(exitItem);
trayIcon = new TrayIcon(image, "Widget Tray App", popup);
trayIcon.setImageAutoSize(true);
try
{
tray.add(trayIcon);
} catch (AWTException e)
{
System.err.println("TrayIcon could not be added.");
}
// Notificación de inicio de aplicación
Notification startWidgetNotification = new Notification(widgetHSAL, widgetStarted, "¡Bienvenido!",
"¡Soy el Widget de Historia de Salud y estoy aquí para ayudarte! Cada vez que tenga información interesante te la mostraré");
growl.notify(startWidgetNotification);
} else
{
System.err.println("System tray is currently not supported.");
}
}
¿Y vosotros? ¿Alguna vez os habéis encontrado con una problemática similar? ¿Cómo la resolvistéis?
Hola.
ResponderEliminarMe ha gustado muchísimo tu proyecto. Estoy buscando algo parecido pero soy un newbie en Java y tengo algunas dificultades.
Me he bajado tu ejemplo pero no cnosigo hacerlo ejecutar bien.. (No tiene errores pero al ejecutarlo no me funciona)
Si me puedieras decir cómo hacerlo funcionar te lo agradecería.
Lo que hay que hacer es:
ResponderEliminar1) Bajarse e instalar Growl for Windows [http://www.growlforwindows.com/gfw/]
2) Añadir al classpath el jar con el API para utilizar Growl desde Java [http://sourceforge.net/projects/libgrowl/]
3) Compilar/Ejecutar usando Java 6
Gracias!
ResponderEliminarMe faltaba instalar Grwol for windows, pensaba que no era necesario.
Un saludo!