Swing felugró egy Swing Application

szavazat
3

Van egy Swing UI bizonyos számú gomb. Egy gomb előhív egy külön swing osztály és egy új ablak nyílik meg az új gombok és egyéb funkciókat. Most, amikor én záró ezt az ablakot az eredeti ablak is egyre zárva. Azt hiszem, ez azért van, mert mind a osztályok Megvalósított

javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
//some code
}
}

Most hogyan lehet leküzdeni ezt? A kódpéldát vagy link nagyon hasznos lesz. Kösz

A kérdést 12/06/2011 13:22
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
7

Nehéz kitalálni, nem látta a kódot. Lehet, hogy a JFramemár setDefaultCloseOperationmegállapított, hogy lezárja a kérelmet, ha az ablak zárva van (talán EXIT_ON_CLOSE). Vessünk egy pillantást a java doc További információ erről.

Tól a java doc :

EXIT_ON_CLOSE(meghatározott JFrame): Kilépés az alkalmazást a System exitmódszerrel. Ezt csak az alkalmazásokban.

Ez azt jelenti, hogy az egész alkalmazás bezárul. Nem akarjuk, hogy a második rész. Csak azt akarom, az ablak (nem az alkalmazás) zárja.

Válaszolt 12/06/2011 13:31
a forrás felhasználó

szavazat
3

SwingUtilities.invokeLaternincs kapcsolatban a kérelem zárás. Ennek célja, hogy elhalasztja az runmetódusmeghívást, amikor a GUI szál befejezte festés és feldolgozása az aktuális eseményeket.

Azt javaslom, hogy ellenőrizze a kódot EXIT_ON_CLOSE, mint már azt, valamint a System.exit()hívások.

A válasz a megjegyzést, mert beállította EXIT_ON_CLOSEmindkét keret, ez a várható viselkedését, hogy kilépjen az egész alkalmazás, amikor bezárja bármelyik kereteket. Lásd Javadoc .

Hogy oldja meg a problémát, akkor el kell távolítani ezt setDefaultCloseOperationa második keretben.

Válaszolt 12/06/2011 13:51
a forrás felhasználó

szavazat
1

Egyetértek a többiekkel, hívja a kódot a fő Swing szál az EDT vagy esemény elküldése szál, használatával SwingUtilities.invokeLatersemmi köze a probléma, és valójában egy jó szokása, hogy az, hogy ha fennáll a veszély, hogy nem ezt a kódot nevezhető ki az EDT. Más szóval, ha bemutatja a többi ablak nevezett kód egy JButton a ActionListener, akkor ott nem kell használni SwingUtilities.invokeLater, mivel a actionPerformed módszer nevezhető az EDT.

Visszatérve a problémára, azt ajánljuk, hogy hozzon a másik ablakban egy JDialog - vagy modális az alkalmazás, vagy nem, attól függően, hogy szükség van - inkább, mint a JFrame. Ezáltal lehetővé válik, hogy tartsa a párbeszéd fölött a fő JFrame, és lehetővé teszi, hogy a felhasználó nem foglalkozni a párbeszéd előtt megy vissza a fő GUI, és megakadályozza, hogy az alkalmazás bezárása, ha a párbeszédablak bezárul.

És hogy válaszoljak a valószínű következő kérdés, igen, JDialogs fér komplex GUI, olyan összetett, mint bármely JFrame.

Válaszolt 12/06/2011 15:03
a forrás felhasználó

szavazat
0

Próbálja meg setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)a szülő JFrame.

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)megszűnik az alkalmazás, amikor az utolsó JFrame zárva mivel EXIT_ON_CLOSEmegszünteti az alkalmazást, amint ez a JFrame zárva van.

Válaszolt 31/12/2013 10:07
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more