为什么我的JWindow实例w只能隐藏窗口,不能退出程序

时间:2022-07-12 20:33:45
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class show
{
public static void main(String[] args)
{
wnd window1 = new wnd();
window1.start();
for(int i=1;i<20000;i++)
{
System.out.println(i);
}
}
}

class wnd extends Thread
{
public static Label lab = new Label("Measure......");
public static JWindow w;
public wnd()
{
w = new JWindow();
w.setSize(300,200);
w.setLocation(200,100);


Container c = w.getContentPane();
c.setLayout( new BorderLayout() );
c.add("Center",lab);
w.setVisible(true);
try
{
sleep(1000);
}
catch(InterruptedException e)
{
//
}

}

public void run()
{
for(int i=1;i<11;i++)
{
lab.setText("----"+i+"----");
try
{
sleep(200);
}
catch(InterruptedException e)
{
//
}
}
w.dispose();
}
}
当程序执行完成后,窗口w可以隐藏,但程序并不退出,进程中java.exe仍然运行
是不是不能用dispose(),但是dispose可以close JFrame的实例啊,我试过用
System.exit(0);
但是这样主程序没有执行完的部分就不能执行了

请各位高手指教,Close w窗口又不影响主程序的继续执行

14 个解决方案

#1


再问一个问题,如何和主线程通信,例如当主进程中变量int i 到5000,结束线程wnd

#2


w.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        dispose();
        System.exit(0);
      }
    });

#3


哦,漏了个字
    w.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        w.dispose();
        System.exit(0);
      }
    });

#4


可是
System.exit(0)
连主程序也退出了

#5


不用System.exit(0);
只留w.dispose();就行

#6


w.dispose()只是将窗口隐藏了,并没有关掉,因为到主线程和窗口线程执行完后,java.exe
仍然没有退出

#7


添加addWindowListener  试试!




#8


w.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        w.dispose(); //隐藏窗口
      }
      public void windowClosed(WindowEvent e) {
        wnd.this.join(); //等着执行完任务
        System.exit(0); //退出
      }    
});

#9


bw78619(Genghis Khan) 写得比较全面点

#10


这个窗口是在线程中建立的,如果在主线程中我要多次启动和关闭这个窗口线程该如何做
谢谢

#11


而且JWindow建立的实例是不能像JFrame实例那样关闭的,它没有关闭按钮的

#12


当使用java创建图形界面时,不仅仅是你所能见到的线程在运行,有些线程总是在后台运行,例如事件分发器,因此,尽管你的window已经dispose,但jvm并不会退出。
当需要退出jvm时,应该需要主动调用System.exit。

#13


To  billh2003(比尔) 
如果调用System.exit,不是连主进程也退出了,
想退出这个JWindow的进程,又不想主进程退出,除了stop,还有什么办法吗?
是不是不推荐使用stop

#14


年前被发配,现在回来了,结帖

#1


再问一个问题,如何和主线程通信,例如当主进程中变量int i 到5000,结束线程wnd

#2


w.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        dispose();
        System.exit(0);
      }
    });

#3


哦,漏了个字
    w.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        w.dispose();
        System.exit(0);
      }
    });

#4


可是
System.exit(0)
连主程序也退出了

#5


不用System.exit(0);
只留w.dispose();就行

#6


w.dispose()只是将窗口隐藏了,并没有关掉,因为到主线程和窗口线程执行完后,java.exe
仍然没有退出

#7


添加addWindowListener  试试!




#8


w.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        w.dispose(); //隐藏窗口
      }
      public void windowClosed(WindowEvent e) {
        wnd.this.join(); //等着执行完任务
        System.exit(0); //退出
      }    
});

#9


bw78619(Genghis Khan) 写得比较全面点

#10


这个窗口是在线程中建立的,如果在主线程中我要多次启动和关闭这个窗口线程该如何做
谢谢

#11


而且JWindow建立的实例是不能像JFrame实例那样关闭的,它没有关闭按钮的

#12


当使用java创建图形界面时,不仅仅是你所能见到的线程在运行,有些线程总是在后台运行,例如事件分发器,因此,尽管你的window已经dispose,但jvm并不会退出。
当需要退出jvm时,应该需要主动调用System.exit。

#13


To  billh2003(比尔) 
如果调用System.exit,不是连主进程也退出了,
想退出这个JWindow的进程,又不想主进程退出,除了stop,还有什么办法吗?
是不是不推荐使用stop

#14


年前被发配,现在回来了,结帖