在线程中打开了一个窗口,如何关闭呢?详情请进,谢谢!!! 请你看清楚我的问题,最好说得清楚一点.有,应该是dispose()吧不过我真的要谢谢你,在这个地方能得到一满意的回答真的很难,有人回答就算不错了,其实我已经很高兴了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 statusFrame.setVisible(false);statusFrame.dispose();不是这样吗,你什么意思,俺不是很清楚 我是想在上面代码中的最后加上关闭线程打开的窗口,如何做?如果像你这么说,直接加上statusFrame.setVisible(false);statusFrame.dispose();根本都无法通过编译 直接stop(deprecated)或者设置一个标志位作为线程运行的条件,要停止线程时,更新标志位。 把它dispose掉,就是过了一定时间后 让线程自己关闭,线程启动后,在出现窗口的代码后面Thread.sleep(N*1000);睡眠N秒,然后再dispose,这样就OK了。N你自己设定 是这样的,我要把查询语句 query = "select * from sup_salary_view where salarydate = \'" + temp + "\'"; 的记录返回到JTable中,但是由于这个过程可能比较久,所以想在结果出来之前用线程打开一个新窗口,显示给用户一个等待界面,等结果出来了,系统再自动关闭所打开的窗口。但是能直接在query语句后面像以下这样做吗?你statusFrame.setVisible(false);statusFrame.dispose();因为statusFrame是在方法中生成的,确定编译不过了,这还用说?线程开始了,生成了窗口,但却不见线程结束,因为打开了窗口,所以如何才能做到我希望的结果呢,谢谢了 cyicecream(小舟) ( ) 你说得对,但是我不知道查询要执行多少秒啊 还有一个问题就是为什么会先出现一个窗口StatusFrame,并且窗口中的Label没有内容,窗口是灰色的。接着结果集出来之后,灰色窗口被关闭,弹出一新窗口StatusFrame,窗口Label中显示" 系统正在返回记录集,请稍候... ",窗口并没有给关闭。而且只看"线程开始",没有看到线程结束,直到关闭新的StatusFrame窗口,才出现"线程关闭"。有一地方我觉得奇怪,为什么会先出现一窗口,再出现一窗口呢,我只生成了一个对象啊,是窗口刷新显示的问题吗?各位一定要帮帮我,这个问题我变着标题问了好多次了,一个星期有多了,始终都没有人回答,真郁闷啊~~~~~~~~~~~~~~~~~~~各位如何遇到这样问题呢,通常是如何解决的?以下是我的StatusFrame类代码:import java.awt.*;import javax.swing.*;class StatusFrame extends JDialog{ StatusFrame(JFrame owner, String title, boolean modal) { super(owner,title,modal); Dimension wndSize = getToolkit().getScreenSize(); //setBackground(Color.YELLOW); setBounds(wndSize.width/4,wndSize.height/4,280,50); setResizable(false); //去掉标题栏 //setUndecorated(true); getContentPane().add(label,BorderLayout.CENTER); //this.pack(); //this.setVisible(true); } void setLabel() { label.setText(" 系统正在返回记录集,请稍候... "); } void setLabel(String labelText) { label.setText(" 正在计算 " + labelText + " 月份工资,请稍候..."); } JLabel label = new JLabel(); } 可以换个角度的呀,你把StatusFrame类的实例化放在外面。线程初始化的时候把这个实例传递给线程,线程启动的时候只是调用这个实例的show方法。在你查询完数据库后在对此实例调用setVisible(false);和dispose();的方法把此对象关闭--同时也能让那个线程停止了吧。至于你说的另外一个问题就不太清楚了,因为我最近都没搞java的图形化的东东。 让用户自己关闭frame,关闭frame时停止线程 frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {//停止你的线程}} 你必须起新线程来实现你要求的自动关闭组件,不能能直接在query语句后面dispose 这样可以:同意在主类中进行,比如打开窗口用主类的showInformationMessage方法,关闭用closeInformationMessage方法。比如:public Main{...... private static JDialog dlgWorkingDialog = null; public static void showInformationMessage(JFrame _frm,String _msgid){} public static void closeInformationMessage(){ if( dlgWorkingDialog != null ) { dlgWorkingDialog.setVisible(false); dlgWorkingDialog.dispose(); dlgWorkingDialog = null; } }......} class DisposeDlg extends Thread{ public void run(){ try{ process.join();//等待事务处理线程结束,process为你的事务处理线程 }catch(InterruptedException e){ System.out.println("Exception:" + e); } clueDlg.dispose();//关闭提示框 } } 我刚才说的就是用一个类来管理你要弹出的这些信息框,比如你线程中调用Main.show*****的方法(方法的具体内容搂主根据自己的情况写)弹出一个对话框,要关闭就用Main.close****方法。 FileOutputStream的刷新问题 给大家做一道题目 求NIO使用心得,关键当成功连接成功了怎么处理?当数据获取到了又如何处理? 【求助】一道题 如何才能获取现在运行着的java程序占用多少内存? 请问怎么 在这个文本编辑器里面实现JScrollPane,也就是可以实现滚动,下拉?实现马上结帖! JSP中的疑问 一个System.in.read()问题? 100分求一树型资源管理器代码 关于JAVA保存文件并查询返回文件流 谁有JCREATOR的注册机啊?急需~ 双机通过双绞线和网卡连接,其中A机可以ping通B机,但是B机不能ping通A机,为什么?
statusFrame.dispose();
不是这样吗,你什么意思,俺不是很清楚
如果像你这么说,直接加上
statusFrame.setVisible(false);
statusFrame.dispose();
根本都无法通过编译
或者设置一个标志位作为线程运行的条件,要停止线程时,更新标志位。
statusFrame.setVisible(false);
statusFrame.dispose();
因为statusFrame是在方法中生成的,确定编译不过了,这还用说?
线程开始了,生成了窗口,但却不见线程结束,因为打开了窗口,所以如何才能做到我希望的结果呢,谢谢了
有一地方我觉得奇怪,为什么会先出现一窗口,再出现一窗口呢,我只生成了一个对象啊,是窗口刷新显示的问题吗?
各位一定要帮帮我,这个问题我变着标题问了好多次了,一个星期有多了,始终都没有人回答,真郁闷啊~~~~~~~~~~~~~~~~~~~
各位如何遇到这样问题呢,通常是如何解决的?
以下是我的StatusFrame类代码:
import java.awt.*;
import javax.swing.*;class StatusFrame extends JDialog
{
StatusFrame(JFrame owner, String title, boolean modal)
{
super(owner,title,modal);
Dimension wndSize = getToolkit().getScreenSize();
//setBackground(Color.YELLOW);
setBounds(wndSize.width/4,wndSize.height/4,280,50);
setResizable(false);
//去掉标题栏
//setUndecorated(true);
getContentPane().add(label,BorderLayout.CENTER);
//this.pack();
//this.setVisible(true);
}
void setLabel()
{
label.setText(" 系统正在返回记录集,请稍候... ");
}
void setLabel(String labelText)
{
label.setText(" 正在计算 " + labelText + " 月份工资,请稍候...");
}
JLabel label = new JLabel();
}
线程初始化的时候把这个实例传递给线程,线程启动的时候只是调用这个实例的show方法。
在你查询完数据库后在对此实例调用setVisible(false);和dispose();的方法把此对象关闭--同时也能让那个线程停止了吧。至于你说的另外一个问题就不太清楚了,因为我最近都没搞java的图形化的东东。
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
//停止你的线程
}}
关闭用closeInformationMessage方法。
比如:
public Main{
......
private static JDialog dlgWorkingDialog = null;
public static void showInformationMessage(JFrame _frm,String _msgid){}
public static void closeInformationMessage(){
if( dlgWorkingDialog != null ) {
dlgWorkingDialog.setVisible(false);
dlgWorkingDialog.dispose();
dlgWorkingDialog = null;
}
}
......}
public void run(){
try{
process.join();//等待事务处理线程结束,process为你的事务处理线程
}catch(InterruptedException e){
System.out.println("Exception:" + e);
}
clueDlg.dispose();//关闭提示框
}
}
比如你线程中调用Main.show*****的方法(方法的具体内容搂主根据自己的情况写)
弹出一个对话框,要关闭就用Main.close****方法。