Frage

Unsere Kunden unserer Software verwendet (Java Swing-Anwendung gestartet Webstart verwendete) neben anderer Software wie MS Office, seine Arbeit zu tun. Von Zeit zu Zeit gibt es wichtige Ereignisse, die er mit ohne große Verzögerung in unserer Software zu tun hat. Der Kunde möchte dann eine wichtige Mitteilung haben. Nun könnte er Excel zur Zeit verwenden, so ein Meldungsfeld auftauchen wird nicht ausreichen (obwohl der Eintrag in der Taskleiste blinkt).

Wir brauchen einen Mechanismus, wie der Outlook-Notifier, das heißt ein Popup, das immer sichtbar ist, aber der Fokus nicht stehlen. Der Anmelder sollte die ganze Zeit angezeigt, bis der Grund für die Nachricht (der Benutzer das Problem gelöst hat) gegangen ist oder der Benutzer die Nachricht geschlossen (wie in Outlook). Außerdem wollen wir einen Tray-Icon angezeigt werden und vielleicht einen Ton spielen.

Ich habe die Java6 java.awt.SystemTray versucht sowie die JDIC (Version 0.9, da wir bereits haben, dass lib im Classpath des Projektes) gleichwertig, aber ich habe nicht einen Weg finden, das Timeout der einzustellen TrayIcon.displayMessage Methode, und die Nachricht scheint nicht immer oben zu sein.

Gibt es eine andere Möglichkeit, außer JNI das angeforderte Verhalten zu erreichen?

Wenn JNI ist die einzige Wahl und seit Windows die einzige Plattform unserer Kunden ist, ist die Outlook Notifier ein Outlook nur Funktion, oder ist es frei verwendbar durch den Windows-API?

oder was andere Möglichkeiten gibt es, den Benutzer über eine wichtige Aufgabe zu benachrichtigen, in einer Software auszuführen ihn ohne Behinderung seine aktuelle Aufgabe in einer anderen Software zu vervollständigen. Ein System modaler Dialog ist daher keine Option!

War es hilfreich?

Lösung

Versuchen Sie es mit setAlwaysOnTop auf Ihrem JFrame / JWindow.

Andere Tipps

Mit OS X die offensichtliche Antwort wäre Growl zu bedienen. Aber es gibt ein kleines Projekt einen ähnlichen Dienst auf Windows-Umgebungen zu tun. Es heißt Snarl . Dies könnten Sie eine neue Option zu versuchen.

Nachteil: Sie müssen ein Tool installieren auf dem Rechner des Kunden. Aus Ihrer Beschreibung gehe ich davon aus Sie eine definierte Gruppe von Benutzern auf Unternehmen Arbeitsplätze haben, nicht wahr? So könnte dies akzeptabel, doch.

Mit Tray: Welche Komponente verwenden Sie Nachricht zu zeigen (JPopup, JDialog, JFrame, JWindow)

Unabhängig davon, welche Sie verwenden, versuchen Sie es unfocusable (Überschreibung isFocusable-Methode) und rufen toFront zu machen.

Sie mich auch das Ergebnis informieren.

Wenn Sie ein Budget haben, sollten Sie eine Lizenz für JIDE . JIDE hat einen Alarm Popup genau aussehen konzipiert, wie die Aussichten Popup / Alarm-Widget.

Hier ist ein Beispiel:

class AlertWindow extends Window implements MouseListener
{
    AlertWindow(JFrame frame)
    {
        super(frame);
        this.setAlwaysOnTop(true);
        this.setFocusable(false);
        this.setSize(200, 200);
        this.setLocation(500, 0);
        this.setBackground(Color.BLACK);
        addMouseListener(this);

        try {
            Class<?> awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities");
            Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class);
            mSetWindowOpacity.invoke(null, this, Float.valueOf(0.50f));
        } catch (NoSuchMethodException ex) {
            ex.printStackTrace();
        } catch (SecurityException ex) {
            ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        } catch (IllegalAccessException ex) {
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            ex.printStackTrace();
        } catch (InvocationTargetException ex) {
            ex.printStackTrace();
        }
    }

    public void mouseClicked(MouseEvent e)
    {
        this.setVisible(false);
    }

    public void mousePressed(MouseEvent e)
    {
    }

    public void mouseReleased(MouseEvent e)
    {
    }

    public void mouseEntered(MouseEvent e)
    {
    }

    public void mouseExited(MouseEvent e)
    {
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top