Wie entsorgen SWT-Shells (und Dialoge)?
Was ist die richtige Art der Entsorgung von SWT Muscheln? Ich habe einige Dialoge mit Erfolg nach der Vorlage im Dialogfeld API-docs. Die SWT-API für Dialogfeld sagt:
Die grundlegende Vorlage für einen benutzerdefinierten dialog in der Regel sieht etwas
wie diese:public class MyDialog extends Dialog { Object result; public MyDialog (Shell parent, int style) { super (parent, style); } public MyDialog (Shell parent) { this (parent, 0); //your default style bits go here (not the Shell's style bits) } public Object open () { Shell parent = getParent(); Shell shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); shell.setText(getText()); //Your code goes here (widget creation, set result, etc). shell.open(); Display display = parent.getDisplay(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } return result; } }
Den Dialogen, die ich erstellt habe nicht haben Ihre eigenen Symbol in der Taskleiste auf Windows, als würde ich erwarten, dass für einen Dialog. Ich will nun auf einige Muscheln, die, wenn ich das richtig verstanden habe wird erhalten eine eigene taskbar-Eintrag unter Windows?
Im Gegensatz zu den Anweisungen wie in der oben genannten API-docs, ich habe auch gesehen,einen Artikel, die zu suggerieren scheint, dass mit einer while-Schleife, wie gezeigt, in den API-docs ist der falsche Weg, es zu tun. Der Artikel stattdessen schlägt die Entsorgung der Shell mithilfe der close-Ereignis-listener.
Was ist die richtige Art der Entsorgung von SWT-Schalen (und zwar waren das Thema, Dialoge)?
InformationsquelleAutor Buttons840 | 2011-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hoffentlich kann ich helfen, zu erklären, was hier Los ist.
Dialog
ist im Grunde nur eine günstige Klasse, Unterklasse, weilShell
selbst nicht sein soll, untergeordnet. Sie können erstellen Sie Schalen, ohne mitDialog
an alle, wenn Sie wollen. In diesem Fall, IhreMyDialog
- Klasse ist eine Klasse, die andere verwenden können, um öffnen Sie die gleiche Art von dialog wiederholt.Dieses Stück code treibt die SWT-event-Schleife, so lange, wie die shell öffnen (Klick auf den schließen-button auf der shell verfügt über die shell per default):
Zu nennen
Display.readAndDispatch
in regelmäßigen Abständen, um Ihre SWT-Anwendung "abschalten". Im Grunde ist es bewirkt, dass alle eingehenden Ereignisse aus dem Betriebssystem (Tastatur und Maus-events, repaint-events, etc.) richtig von Ihrer Anwendung verarbeitet werden.readAndDispatch
im Grunde dauert ein Ereignis aus der Anwendung Ereignis-queue und ruft die richtigen Zuhörer. In einer Eclipse RCP-Anwendung, die von workbench ist normalerweise verantwortlich für die "Pumpen" die event-loop und Sie nicht zu verwirren haben mit es. Hier ist ein wenig mehr Infos über die event-Schleife.Den Zweck "manuell Pumpen" von der Ereignis-Schleife in diesem Zusammenhang ist zu verhindern, dass
MyDialog.open
von der Rückkehr, während die Schale nicht entsorgen, aber immer noch halten die Anwendung von "hängen". Wenn IhrMyDialog.open
Methode versucht zu warten, bis die Schale zu entsorgen, hatte aber keine Pumpe die Ereignis-Schleife, die von der Anwendung "aufhängt", denn ohne die Ereignis-Schleife läuft, gibt es keine Möglichkeit für die shell, um immer informiert werden, sollte es entsorgt werden!Du kann erstellen Sie Schalen, ohne die dieses Muster verwenden. Hier ist ein Beispiel für eine sehr einfache SWT-Anwendung, öffnet eine Tonne von Muscheln auf einmal und läuft so lange, wie mindestens eine von Ihnen ist noch offen (habe ich weggelassen, die Paket-Deklaration und Importe):
Beachten Sie, dass ich ein
DisposeListener
jede shell, damit ich entsprechende Maßnahmen ergreifen können, wenn die Schale geschlossen ist. Sie können auchIShellListener
um mehr zu hören, die direkt für das close-Ereignis und sogar verhindern, dass es (was Sie vielleicht tun möchten, wenn die shell enthält nicht gespeicherte Arbeit, zum Beispiel). Hier ist ein ärgerlich änderung das erste Programm, das gestartet 5 Muscheln und zufällig verhindert, dass Sie schließen Sie:Hoffentlich hat dies dazu beigetragen, dass die Dinge mehr klar!
Bearbeitet, um hinzufügen: ich bin mir nicht ganz sicher, warum Sie sich nicht immer ein windows-Taskleiste Element für Ihre shell, aber ich vermute, es hat etwas zu tun mit dem Stil-flags, die Sie vorbei sind in die shell-Konstruktor. Die Muscheln in meinem Beispiel habe keine Stil-flags, und Sie alle erhalten ein Symbol in der Taskleiste.
InformationsquelleAutor Mike Daniels