2016-04-26 7 views
0

Hier ist der Code meines Programms. Problem ist, dass, wenn ich die Haupt GUI schließe Mein neuer Thread auch beendet. Was definitionsgemäß nicht sein sollte, weil es kein Daemon-Thread ist. Ich arbeite in Eclipse und jede Hilfe wäre willkommen.Warum der neue Thread auch nach dem Schließen der Swing GUI in Java beendet wird

public class HomeScreen extends JFrame { 

    private JPanel contentPane; 
    private JTextField textField; 
    private JTable table; 
    private JTextField textField_1; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        HomeScreen frame = new HomeScreen(); 
        frame.setVisible(true); 

        Thread t = new Thread(new Runnable() { 

         @Override 
         public void run() { 
          while(true){ 
           System.out.println("Hello");//This should print "Hello" forever but this thread exits after i close main GUI 
          } 
         } 
        }); 
        t.start(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
+1

Es ist noch Drucken fröhlich auf meinem PC, wie hast du das Fenster geschlossen? Cmd + Q? Alt + F4? – MadProgrammer

+0

@MadProgrammer Ich habe gerade meine Swing-GUI geschlossen –

+1

@MadProgrammer Hmm .. das ist einer der wenigen Male, die ich verwendet habe, die "kann nicht reproduziert werden" (ja, das gleiche Verhalten hier) schließen Grund. Seltsamerweise erwähnt es auch das Posten eines MCVE (was das OP effektiv tat). –

Antwort

2

Danke euch allen. Ich habe den Trick nur eine Anweisung hinzugefügt, um Thread unendlich zu laufen

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
+3

Das würde vorschlagen, dass der Rahmen zu irgendeinem Zeitpunkt auf 'EXIT_ON_CLOSE' gesetzt wurde, was nicht in Ihrem Beispielcode war – MadProgrammer

+0

@MadProgrammer Sie sind absolut Korrekt –

+1

* "Sie haben absolut Recht .." * In Zukunft bitte so viel in die [mcve] einfügen, wie sauber kompiliert werden muss (zB die Importe, und schließen '}') und dann kopieren Sie es in a Die neue Projekt- oder Klassendefinition, um das Verhalten zu testen, bleibt weiterhin bestehen. ** Der Code, den Sie gepostet haben, war fast ein MCVE, ist aber an diesem letzten, wichtigen Punkt gescheitert. Und zu @ LaxmikantRevdikar, gute Nutzung Ihres ESP & ausgezeichnet, um zu sehen, dass Sie es für das gute statt böse verwenden. ;) –

Verwandte Themen