Beenden Dialog beim Schließen

Status
Nicht offen für weitere Antworten.

ryoshi

Mitglied
Guten Tag,

nach langer Zeit des "normalen" Java programmierens, mit den native Librarys von Sun, habe ich mich entschlossen eine Anwendung mit SWT / JFace zu schreiben.

Nachdem ich mich etwas in SWT eingelesen und rumprobiert hatte, hab ich versucht das ganze mit JFace zu implementieren, da das ja angeblich einfacher sein soll.

Nun zu meinem Problem:
Ich möchte gerne den User mit einem Beenden-Dialog nerven. Also eine Art "Wollen Sie das Programm wirklich beenden?" Ja-Nein Abfrage.

Wenn ich ohne JFace arbeite kann ich das sehr einfach mit einem ShellListener machen:

Code:
final MessageBox messageBox = new MessageBox(shell, SWT.ICON_QUESTION | SWT.YES | SWT.NO);
messageBox.setMessage("Möchten Sie das Programm wirklich schließen?");
messageBox.setText("Frage");

shell.addShellListener(new ShellAdapter()
{
    public void shellClosed(ShellEvent arg0)
    {
        if(messageBox.open() == SWT.NO)
        arg0.doit = false;
    }
});

Durch das ShellEvent mit seinem Attribut "doit" kann ich die Aktion abbrechen.

Arbeite ich jetzt mit einem JFace und überschreibe wie gefordert die Methode "createContents(Composite parent)" und versuche da folgendes zu machen:

Code:
protected Control createContents(Composite parent)
{
    final Shell shell = getShell();

    ImageDescriptor programmIcon = ImageDescriptor.createFromFile(Applikation.class, "icons/programm_icon.gif");
		
    shell.setSize(700, 500);
    shell.setText("Applikation");
    shell.setImage(programmIcon.createImage());

    shell.addShellListener(new ShellAdapter()
    {
        public void shellClosed(ShellEvent e)
        {
            boolean beenden_Dialog = MessageDialog.openQuestion(shell, "Frage", "Wirklich Beenden?");
            if(!beenden)
                e.doit = false;
        }
    });

    return parent;
}

Da gibts folgende rote Tapete:
Code:
org.eclipse.swt.SWTException: Widget is disposed
	at org.eclipse.swt.SWT.error(SWT.java:3374)
	at org.eclipse.swt.SWT.error(SWT.java:3297)
	at org.eclipse.swt.SWT.error(SWT.java:3268)
	at org.eclipse.swt.widgets.Widget.error(Widget.java:435)
	at org.eclipse.swt.widgets.Widget.getDisplay(Widget.java:545)
	at org.eclipse.jface.dialogs.IconAndMessageDialog.getSWTImage(IconAndMessageDialog.java:266)
	at org.eclipse.jface.dialogs.IconAndMessageDialog.getQuestionImage(IconAndMessageDialog.java:247)
	at org.eclipse.jface.dialogs.MessageDialog.<init>(MessageDialog.java:149)
	at org.eclipse.jface.dialogs.MessageDialog.openQuestion(MessageDialog.java:364)
	at de.annabamp.adressbuch.gui.Applikation$1.shellClosed(Applikation.java:39)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:159)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:952)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:937)
	at org.eclipse.swt.widgets.Decorations.closeWidget(Decorations.java:257)
	at org.eclipse.swt.widgets.Decorations.WM_CLOSE(Decorations.java:1606)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3248)
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1539)
	at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:1634)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1927)
	at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:443)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334)
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1539)
	at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:1634)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1927)
	at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:443)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334)
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1539)
	at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:1634)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1932)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2966)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:820)
	at org.eclipse.jface.window.Window.open(Window.java:796)
	at de.annabamp.adressbuch.gui.Applikation.<init>(Applikation.java:22)
	at de.annabamp.adressbuch.gui.Applikation.main(Applikation.java:110)

Nicht einmal ein einfaches "e.doit = false;" verhindert das Schließen. Es gibt zwar keinen Fehler, aber das Schließen wird nicht verhindert.

Bei Swing würde ich einfach die Methode "windowClosed(WindowEvent e)" überschreiben und sie meinem JFrame zum fressen geben, aber hier weiß ich echt nicht weiter.

Vielen Dank für jede ernst gemeinte Antwort!

Gruß ryoshi
 

ryoshi

Mitglied
Keine irgendeine Erfahrung damit gemacht?

Ich habe nun weitere Listener getestet, wie den DisposeListener, aber da kann ich das Schließen des Programms nicht verhindern. Google und andere Foren brachten auch nicht die erwünschte Antwort.

Thema noch aktuell.. Ich wäre für jede Anregung oder Außeinandersetzung mit dem Thema dankbar.

Gruß ryoshi
 

ryoshi

Mitglied
Ok habe nun selber eine Antwort gefunden.
Für den Fall das mal jemand das gleiche Problem hat und nicht weiter weiß poste ich mal meine Lösung. Hoffe das alles korrekt freigegeben wurde (disposed), da ich noch nicht lange mit SWT arbeite.

Code:
public class Applikation extends ApplicationWindow
{
   public Applikation()
   {
        super(null);
        setBlockOnOpen(true);
        open();
   }

   protected void handleShellCloseEvent()
   {
        boolean exit = MessageDialog.openQuestion(getShell(), "Frage", "Wirklich beenden?");
        if(exit)
            getShell().dispose();
   }

   public static void main(String[] args)
   {
        new Applikation();
        Display.getCurrent().dispose();
   }
 }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N JavaFX Vor beenden der Anwendung durch klicken von X Dialog zeigen AWT, Swing, JavaFX & SWT 1
T DIALOG für BEENDEN AWT, Swing, JavaFX & SWT 11
N Beenden-Dialog mit "Beenden" und "Abbrechen&q AWT, Swing, JavaFX & SWT 2
V Zweimal klicken um Modalen Dialog zu beenden? AWT, Swing, JavaFX & SWT 15
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
S Swing Alles beenden bei Fenster mit Scroll-Balken AWT, Swing, JavaFX & SWT 6
D JafaFX Anwendung beenden AWT, Swing, JavaFX & SWT 11
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
T ThreadPool sicher beenden unter Verwendung von swt.widgets.Display.syncExec AWT, Swing, JavaFX & SWT 1
S Event Handling konsole Programm mit Tastendruck beenden AWT, Swing, JavaFX & SWT 5
I Swing Menu->Beenden AWT, Swing, JavaFX & SWT 6
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
B Über SWT Button Thread beenden AWT, Swing, JavaFX & SWT 2
J Schließen über x soll zwei Prozesse beenden AWT, Swing, JavaFX & SWT 7
1 CellEditor mit ComboBox richtig beenden AWT, Swing, JavaFX & SWT 4
P Vor Beenden änderungen prüfen AWT, Swing, JavaFX & SWT 2
R Endlosschleife auf JButton druck beenden AWT, Swing, JavaFX & SWT 9
S AWT Fenster schließen und Programm beenden AWT, Swing, JavaFX & SWT 10
F Swing Beenden eines ActionListener über einen Button AWT, Swing, JavaFX & SWT 8
E Swing CellEditor bei Fokusverlust Bearbeitung beenden?! AWT, Swing, JavaFX & SWT 6
J Java-Applet beenden AWT, Swing, JavaFX & SWT 3
T Java Applet beenden AWT, Swing, JavaFX & SWT 2
S Gridlayout - Tabellenzeile "beenden" AWT, Swing, JavaFX & SWT 3
P Mouse Listener beenden AWT, Swing, JavaFX & SWT 14
E windowClosing() - JFrame nicht durch X knopf gleich beenden? AWT, Swing, JavaFX & SWT 9
M Programm beenden AWT, Swing, JavaFX & SWT 10
S Thread beenden, wenn Component nicht mehr benötigt wird AWT, Swing, JavaFX & SWT 12
J Fenster schließen ohne das Programm zu beenden AWT, Swing, JavaFX & SWT 3
G java.awt Vollbild beenden AWT, Swing, JavaFX & SWT 6
M JTable: TableCellEditor nach Eingabe sofort beenden? AWT, Swing, JavaFX & SWT 3
S Bei SWT den Windows beenden Button manipulieren? AWT, Swing, JavaFX & SWT 4
U Anwendung nicht beenden beim form schliessen? AWT, Swing, JavaFX & SWT 6
M KeyEvent - Programm mit ESC beenden AWT, Swing, JavaFX & SWT 7
G "Alte" Instanzen beenden AWT, Swing, JavaFX & SWT 2
S Anwendung über Button beenden? AWT, Swing, JavaFX & SWT 4
S JPopupMenu - Kontrolliert beenden AWT, Swing, JavaFX & SWT 3
G MouseEvent beenden AWT, Swing, JavaFX & SWT 17
B JOptionDialog mit Enter Beenden? AWT, Swing, JavaFX & SWT 5
L JOP.showInputDialog: Abbrechen Button-Funktion beenden AWT, Swing, JavaFX & SWT 5
X Fenster schließen aber nicht beenden AWT, Swing, JavaFX & SWT 9
S "Millionen" von Threads? Programm komplett beenden AWT, Swing, JavaFX & SWT 2
J CellEditor per Button beenden AWT, Swing, JavaFX & SWT 2
K Programm lässt sich nicht beenden AWT, Swing, JavaFX & SWT 9
MiHimbert Rückmeldung an den aufrufenden JAVAFX-Dialog AWT, Swing, JavaFX & SWT 1
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
L Swing Files abspeichern mit Save as Dialog Fenster AWT, Swing, JavaFX & SWT 5
melaniemueller Confirmation Dialog erstellen AWT, Swing, JavaFX & SWT 18
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
H Eigener Dialog mit Rückgabe -> Warten auf Button AWT, Swing, JavaFX & SWT 3
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
C FileChooser Save-Dialog zeigt Files nicht an AWT, Swing, JavaFX & SWT 3
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
E Swing Dialog modal aufrufen AWT, Swing, JavaFX & SWT 2
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
RalleYTN Modaler Dialog und JTree Node mit sehr... seeeeehr vielen Elementen AWT, Swing, JavaFX & SWT 6
T JOptionPane Dialog plus Rechnung ausgeben AWT, Swing, JavaFX & SWT 1
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
J JavaFX Dialog - Style AWT, Swing, JavaFX & SWT 6
D Swing Dynamisches Dialog UI AWT, Swing, JavaFX & SWT 8
H JFileChooser Dateinamen vorgeben (Save Dialog) AWT, Swing, JavaFX & SWT 9
D Neues Dialog Mittig auf dem Bildschirm AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Grafikproblem nach Aufruf von JColorChooser-Dialog AWT, Swing, JavaFX & SWT 6
M Java FX Innerhalb einem FXML-Dialog weiteren FXML-Dialog einblenden AWT, Swing, JavaFX & SWT 3
T SWT SWTBot Test: Dialog soll sich öffnen,wenn button gedrückt AWT, Swing, JavaFX & SWT 3
G Datei öffnen Dialog modifizieren AWT, Swing, JavaFX & SWT 13
W SWT Dialog richtig schließen? AWT, Swing, JavaFX & SWT 0
M Benutzer-Dialog ohne System.in/out AWT, Swing, JavaFX & SWT 2
P JOptionPane input und show Message Dialog AWT, Swing, JavaFX & SWT 5
F Dialog mit Titel, Text und Ok Button AWT, Swing, JavaFX & SWT 2
TheWhiteShadow SWT Dialog Titel setzen AWT, Swing, JavaFX & SWT 6
VfL_Freak Darstellungsproblem mit Dialog AWT, Swing, JavaFX & SWT 8
P Swing Dialog zeigt keinen Inhalt in Verbindung mit JFrame AWT, Swing, JavaFX & SWT 18
G Nebenläufiger Prozess mit Dialog AWT, Swing, JavaFX & SWT 2
C Swing Fortschrittsanzeige im Dialog ohne Fortschrittsbalken und Abbruchoption AWT, Swing, JavaFX & SWT 7
M Swing Elemente im Dialog neu "laden". AWT, Swing, JavaFX & SWT 6
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
R DnD in modalem Dialog AWT, Swing, JavaFX & SWT 4
I Dialog zum Speichern? AWT, Swing, JavaFX & SWT 16
M Dialog soll etwas an "Oberklasse" übergeben AWT, Swing, JavaFX & SWT 3
qwerqer Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen AWT, Swing, JavaFX & SWT 3
M Datei Speichern unter Dialog - SWT AWT, Swing, JavaFX & SWT 3
hdi Swing Bzgl JFrame & modaler Dialog AWT, Swing, JavaFX & SWT 6
N Modaler Dialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 8
J SWT Dialog in Dialog automatisch öffnen AWT, Swing, JavaFX & SWT 19
H Confirm Dialog erweitern AWT, Swing, JavaFX & SWT 5
K Modaler Dialog aber trotzdem Aktualisierung des MainFrames AWT, Swing, JavaFX & SWT 6
B Gestaltung eines Optionen-Dialog AWT, Swing, JavaFX & SWT 16
P Swing Option zeitbeschränkt in modalem Dialog anbieten AWT, Swing, JavaFX & SWT 2
X Einem JFrame einen Dialog als Parent setzen. Möglich? AWT, Swing, JavaFX & SWT 4
L AWT Window, Dialog und verschiedene Betriebssysteme AWT, Swing, JavaFX & SWT 2
T SWT Window Builder Pro File Dialog anzeigen AWT, Swing, JavaFX & SWT 10
A Swing Delay (1-4 Sek.) bei JTable und Dialog beim ersten Ausführen AWT, Swing, JavaFX & SWT 3
P Swing modaler dialog AWT, Swing, JavaFX & SWT 3
P SWT Dialog AWT, Swing, JavaFX & SWT 3
O Login Dialog zweimal öffnen AWT, Swing, JavaFX & SWT 2
B Datei öffnen Dialog AWT, Swing, JavaFX & SWT 9
N Swing eigenen Dialog erstellen AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben