Java Applikation in SystemTray

fanste

Erfahrenes Mitglied
Hi,

Ja, ich habe die Forensuche benutzt und auch 2 Themen gefunden. Jedoch haben mir die nicht weitergeholfen. Auch die Links die dort waren. Die Programme haben nicht so fuktioniert, wie sie sollten.

Also hier meine Frage.

Wie kann ich mein Programm so einrichten, dass es im Hintergrund weiterläuft. Man soll auf einen Button klicken, der das Programm dann im SystemTray ablegt. Ist das möglich? bzw wie muss ich das machen? Könnte mir das einer bitte erklären?

Die Programme, die ich mir aus den Themen angeschaut habe, haben alle nicht funktioniert. Habe bis zu 93(!) Fehlern erhalten.


mb fanste
 
Das hatte ich schon. Hat aber nicht funktioniert. Vll hab ich auch was falsch gemacht. Aber ich habe beim Starten der Demos nur Fehler erhalten!
 
Nunja, ich glaube nicht, dass sie nach ca. 15 Versionen nicht längst gemerkt hätten, dass sich das Ding nicht kompilieren lässt ... ;)
 
^^
Also ich hab jetzt was funktionierendes gefunden.
https://jdic.dev.java.net/servlets/ProjectDocumentList?folderID=1430&expandFolder=1430&folderID=1430 (Windows Version)
Jetzt müsste ich nur noch herrausfinden, wie ich mein Programm dazu bekomme, dass es im Hintergrund weiterläuft, aber nicht mehr als das SystemTray Icon angezeigt wird.
Sobald ich dann im SystemTray "anzeigen" auswähle, sollte das Proggi wieder sichtbar werden.

(Nein, dass soll nicht bedeuten, dass ich mich jetzt auf die faule Haut lege und euch schuften lasse. Sobald ich ein paar Infos habe, wie das geht, mache ich das alleine ;) )

EDIT:
So im Hintergrund hab ich es nun. War eigentlich easy (setVisible(false))
Jetzt fehlt nur noch das Tray Menü. Hierzu diese Frage:

Wie kann ich von dem SystemTray aus auf das Proggi zugreifen und sagen, dass es wieder sichtbar werden soll?
 
Zuletzt bearbeitet:
Hallo!

Mit SWT kann man auch recht einfach das SystemTray bevölkern:
Code:
/**
 * 
 */
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tray;
import org.eclipse.swt.widgets.TrayItem;

/**
 * @author Tom
 * 
 */
public class SWTSystemTrayExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Display display = new Display();
        final Shell shell = new Shell(display);
        Tray tray = display.getSystemTray();
        TrayItem trayItem = new TrayItem(tray, SWT.None);
        trayItem.setImage(new Image(display, "c:/eclipseIcon.jpg"));
        trayItem.setToolTipText("tutorials.de");
        trayItem.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                MessageBox messageBox = new MessageBox(shell);
                messageBox.setText("Hallo!");
                messageBox.setMessage("user helfen usern");
                messageBox.open();
                shell.dispose();
            }
        });

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }
}

Siehe auch hier:
http://dev.eclipse.org/viewcvs/inde.../src/org/eclipse/swt/snippets/Snippet143.java

Gruß Tom
 
Menschens Kinder. Du bisch vll einer. Da heißt es immer, "Man soll es selber machen" und bei dir bekommt man ohne viel reden gleich ein gutes Code Beispiel.

So aber jetzt zur Sache.
Das Tray Menü habe ich nun erfolgreich erstellt. Kann ich das jetzt einfach in mein Proggi einbinden? Und wie kann ich dann dem Proggi sagen, dass es sichtbar werden soll?

So vll?

Im Tray einfach noch hinzufügen:
private console cs;

und dann via cs.setVisible(true); erscheinen lassen?
(console heißt meine Klasse)
 
Hi,

So ich habe mein Programm jetzt ein bisschen umschreiben, damit das klappt.
Jetzt will aber wieder was anderes nicht.

Es gibt ja 2 Buttons zum Starten und Stoppen der Dienste. Wenn sich aber während des Betreibs des Programms die Beschriftung ändert, verscwindet der Button hinter dem Layer. Woran liegt das und wie kann ich das verhindern?

mb fanste
 
Zuletzt bearbeitet:
Zurück