2009-12-22 47 views

Trả lời

73

Nếu bạn làm không muốn ứng dụng của bạn để chấm dứt khi một JFrame được đóng lại, sử dụng

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) 

thay vì

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Từ documentation:

  • DO_NOTHING_ON_CLOSE (được định nghĩa trong WindowCons tant): Đừng làm gì cả; yêu cầu chương trình xử lý thao tác trong phương thức windowClosing của đối tượng WindowListener đã đăng ký.
  • HIDE_ON_CLOSE (được xác định trong WindowConstants): Tự động ẩn khung sau khi gọi bất kỳ đối tượng WindowListener đã đăng ký nào.
  • DISPOSE_ON_CLOSE (được xác định trong WindowConstants): Tự động ẩn và bỏ khung sau khi gọi bất kỳ đối tượng WindowListener đã đăng ký nào.
  • EXIT_ON_CLOSE (được xác định trong JFrame): Thoát khỏi ứng dụng bằng cách sử dụng phương pháp Thoát hệ thống. Chỉ sử dụng trong ứng dụng.

Đây là câu trả lời của tôi trước khi câu hỏi đã được làm sáng tỏ, vẫn có thể có ích:

Bạn có thể sử dụng setVisible(false) trên JFrame của bạn nếu bạn muốn hiển thị cùng một khung một lần nữa.
Nếu không, hãy gọi dispose() đến remove all of the native screen resources.

+0

cảm ơn, nhưng tôi đóng cửa sổ bằng nút đóng ở góc trên bên phải. Nó không sử dụng setVisible (false) chắc chắn và phải dừng thread. – Keating

+0

Tôi nghĩ rằng tôi phải ghi đè lên một số mothed, tôi không biết mà mothed nhưng tôi tin rằng nó không phải là đóng cửa mothed. – Keating

+0

Tôi không chắc chắn những gì bạn cố gắng đạt được, bạn có thể vui lòng chỉnh sửa câu hỏi của bạn và thêm một số thông tin về những gì bạn cố gắng làm và những gì không hoạt động? –

3

Ứng dụng có giúp ích cho bạn không?

import java.awt.BorderLayout; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class TwoJFrames { 
    public static void main(String[] args) { 
     int nb = 4; 
     if (args != null && args.length > 0) { 
      nb = Integer.parseInt(args[0]); 
     } 

     final int frameCount = nb; 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       for (int i = 0; i < frameCount; i++) { 
        JFrame frame = new JFrame("Frame number " + i); 
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
        JPanel p = new JPanel(new BorderLayout()); 
        p.add(new JLabel("Click on the corner to close..."), BorderLayout.CENTER); 
        frame.setContentPane(p); 
        frame.setSize(200, 200); 
        frame.setLocation(100 + 20 * i, 100 + 20 * i); 
        frame.setVisible(true); 
       } 
      } 
     }); 

    } 
} 
+1

hữu ích, cảm ơn bạn! – Keating

Các vấn đề liên quan