我在run()中,用for循环设置进度条的值,循环结束后关闭进度条所在的frame.
但是没有加上关闭窗口的语句时,一切正常。加上关闭窗口的语句后,不正常。
是否线程有什么机制问题?我无法了。一下源代码:
public void run(){
for (int i = 1; i < 11 ; i++){p.prog.setValue(i*100);try{
Thread.sleep(300);
}catch(Exception e){}
}/*try{
Thread.sleep(20000);
}catch(Exception e){}
//关闭本框架,打开密码框架
//setVisible(false);
//dispose();*/
}}

解决方案 »

  1.   

    内部培训资料:
    一、最新大型新东方J2EE培训视频录像(新东方高级JAVA培训讲师  20G  共6DVD)
          培训内容: 初级部分(280学时)+高级部分(400学时),共680学时。
      初级部分(280学时)
      1). JavaOO程序设计基础:J2sdk基础、Java 面向对象基础、Java API使用、数据结构及算法基础、Java高级类特性、异常处理; 
      2). J2SE平台程序设计:Java AWT图形界面程序开发,Swing图形程序设计,Socket网络应用程序设计,对象序列化,Java 常用数据结构,Applet,高级I/O流和文件编程,多线程程序设计;
      3). 项目开发:globle get 多线程下载系统 
      4). Java桌面系统项目开发:桌面项目,基于Socket的聊天室;数据库:SQL、ORACLE9i 数据库的管理基础; 
      5). Java Web应用编程:Java数据库编程:JDBC、JDBC-ODBC Java Web编程:JSP、Servlet、JavaBean、java应用编程服务器:Tomcat / … 集成开发环境(IDE):Jbuilder / Eclipse / … Java应用构建工具:Apache Ant / …; 
      6). 项目开发:移动公司计费账务管理系统            
      高级部分(400学时)
      1). Linux初步:Linux基本操作,LINUX下的Java程序开发,Linux系统的简单管理; 
      2). 数据库深入编程:PL/SQL;数据库和数据库设计库程序设计; 
      3). Struts、spring、hibernate:高级Java Web应用开发:业界通用的MVC设计模式,Struts架构、应用程序国际化、Struts Taglib; 
      4). 项目开发:大唐任务管理系统;
      5). J2ME程序设计:移动开发概述、J2ME界面程序设计、J2ME数据库程序设计、手机短信、多媒体短信(彩信)开发; 
      6). Java高级程序设计(J2EE):J2EE架构、EJB核心技术;J2EE主流开发工具JBuilder、应用服务器WebLogic ;Java和XML:XML, Web Service,异构系统整合、分布式应用;
      7). 软件系统架构设计:UML与系统建模和设计、Rational Rose、软件工程和软件过程模型、版本控制;
      8). 项目开发:中国移动电子运行维护系统;
    二、Oracle培训录像
       1.Oracle 9i DBA大型中文视频培训录像(全)(中国IT认证实验室 13.4G 共4DVD)
         *1Z0-007 Introduction to Oracle9i SQL 
         *1Z0-031 Oracle9i DBA Fundamentals I 
         *1Z0-032 Oracle9i DBA Fundamentals II 
         *1Z0-033 Oracle9i Performance Tuning
           另附全套PPT幻灯片培训讲稿。
        全程标准Oracle大学授课环境,资深Oracle认证讲师、中国电信深圳培训中心数据库讲师主讲。具有多年的Oracle DBA教学经验,授课风格自成一体,逻辑清晰、层次分明,讲解深入浅出、信息量大,实用性强,短时间内把您培养成高级数据库专家。
       2.Oracle 10G 数据库培训录像(中科院 共18讲)
    三、项目经理快速培训
        IT项目管理培训录像(项目经理提升必看)(共28集 Rmvb格式 1DVD)现在购买送
    1.孙鑫 XML网页编程开发详解 (内容大小2G 1DVD)
    2.孙鑫J2EE培训录像(共76讲 含源代码及PPT幻灯片课件 1DVD)
        本视频侧重于J2EE框架机制原理,内容分为spring,struts,hibernate,powerdesign四个部分的讲解(Spring共23讲,详细讲解了spring的使用。Struts共13讲,Struts通过一个完整视例讲解全部流程,以及标签库。Hibernate共24讲,深入讲解了hibernate的机制。PowerDesigner共6讲,讲解数据库建模的步骤及其工具的使用。)
    需要的速联系
    Q Q: 3670989
    MSN: [email protected]
      

  2.   

    没加关闭窗口的语句前,进度条显示正常,在run()加上关闭窗口的语句后,进度条
    不再显示进度。窗口关闭正常。我想,大概是线程机制问题。是否是?
    谢谢
      

  3.   

    不同步? + synchronize试试
      

  4.   

    代码 有些多.最关键的是最后的那个run()
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    /*此为加有JProgressBar的Jpanel*/
    class ProgressPanel extends JPanel{
    JProgressBar prog;
    JLabel area;
    JPanel p1;//存放进度条
    JPanel p2;//存放文本区域 
    public ProgressPanel(){
    prog = new JProgressBar(0,1000);
    prog. setPreferredSize(new Dimension (200,30));
    area = new JLabel("数据加载中"); 
    Font f = new Font ("Dialog",Font.BOLD,30); area.setFont(f);
    //设置总面板布局
    this.setLayout(new GridLayout(2,1) );
    /*设置各个分面板的布局*/
    p1 = new JPanel();
    p2 = new JPanel();
    p1.add(prog);
    p2.add(area);

    /*最后的工作*/
    this.add(p1);
    this.add(p2);
    }
    }//
    class ProgressFrame1 extends JFrame{
    ProgressPanel p;
    WindowListener listener;

    public ProgressFrame1(){
    p = new ProgressPanel();
    this.add(p);
    this.setSize(500,500);
    Dimension screenSize = Toolkit . getDefaultToolkit().getScreenSize();
    this.setLocation((screenSize.width - 500)/2,(screenSize.height-500)/2);

    /*添加监听器打开窗口时,运行线程*/
    listener = new MyListener ();
    this.addWindowListener(listener);
    this.setVisible(true);
    /*当进度条达到最大值时,打开密码窗口*/
    //int j =p.prog.getMaximum();

    }

    public static void main(String [] sargs){
    ProgressFrame1 f = new ProgressFrame1();

    }

    /****内部响应类*****/
    class MyListener  implements Runnable,WindowListener  {
    public void windowOpened(WindowEvent we){
    run();
    }
    public void windowActivated(WindowEvent e){}
    public void windowClosed(WindowEvent e){}
    public void windowClosing(WindowEvent e){}
    public void windowIconified(WindowEvent e){}
    public void windowDeiconified(WindowEvent e){}
    public void windowDeactivated(WindowEvent e){}

    /*设置进度条*/

    public void run(){
    for (int i = 1; i < 11 ; i++){

    p.prog.setValue(i*100);

    try{
    Thread.sleep(300);
    }catch(Exception e){}
    }
    System.out.println("why");
    //dispose();
    /*try{
    Thread.sleep(2000);
    }catch(Exception e){}
    //关闭本框架,打开密码框架
    //setVisible(false);
    */
    }

    }

    }
      

  5.   

    将你的内部类修改如下:
            class MyListener  implements Runnable,WindowListener  {
                    public void windowOpened(WindowEvent we){
                      p.prog.setMinimum(0);
                      p.prog.setMaximum(10);
                            run();
                    }
                    public void windowActivated(WindowEvent e){}
                    public void windowClosed(WindowEvent e){}
                    public void windowClosing(WindowEvent e){}
                    public void windowIconified(WindowEvent e){}
                    public void windowDeiconified(WindowEvent e){}
                    public void windowDeactivated(WindowEvent e){}                /*设置进度条*/                public void run(){
                            for (int i = 1; i < 11 ; i++){                                p.prog.setValue(i); 
                                    p.prog.update(p.prog.getGraphics());
                                    System.out.println(i);
                                    try{
                                            Thread.sleep(300);
                                    }catch(Exception e){}
                            }
                            System.out.println("why");
                            dispose();
                            /*try{
                                    Thread.sleep(2000);
                            }catch(Exception e){}
                            //关闭本框架,打开密码框架
                            //setVisible(false);
                            */
                    }        }
    我试了一下,没有问题了,主要是你的进度条有问题。