等程序调用完界面显示又恢复了正常!!!!!!独立线程例如时间在界面的更新也运行正常了,有知道怎么回事的高手吗?

解决方案 »

  1.   

    你的跟新和swing是同一个线程,你用Thread.getId()打印一下就知道,而你的时间是新的线程,所以没有影响
      

  2.   

    我还发现个问题就是我在界面放个了GIF得动态图片,程序在跑数据库时,动态图片也会不动,有知道的吗?
      

  3.   

    我做了个Database Explorer,我的JTABLE加载数据时使用如下方式:
    SwingUtilities.invokeLater(new Runnable() {
             public void run() { 
              try {
    jTable1.setModel(new JDBCTableModel (conn, (String)jComboBox1.getSelectedItem()));
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    });
      

  4.   

    { try {
                String  ratedCurrentStr = ratedCapacityTxt.getText();
                float ratedCurrentFlt = (float) (Float.parseFloat(ratedCurrentStr));
                selectChange =  stmt.executeQuery("select * from 整点数据 where 时间 >='"+startTime+"' " +
                               "and 时间<='"+endTime+"'and 设备号='"+sortedList.getSelectedValue().toString()+"'");
                if (selectChange.last()){
                    aPhaseVol = new String[selectChange.getRow()];
                    bPhaseVol = new String[selectChange.getRow()];
                    cPhaseVol = new String[selectChange.getRow()];
                    aPhaseCurrent = new String[selectChange.getRow()];
                    bPhaseCurrent = new String[selectChange.getRow()];
                    cPhaseCurrent = new String[selectChange.getRow()];
                    phaseTime = new String[selectChange.getRow()];
                }
                selectChange.beforeFirst();      //刷新电压不平衡,电流不平衡,负载率
                int ia=0;int ib=0;int ic=0;
                while ( selectChange.next() ){
                    aPhaseVol [ia] =  selectChange.getString( "A相电压(V)" );
                    ia++;
                }
                selectChange.beforeFirst();
                while ( selectChange.next() ){
                    bPhaseVol [ib] =  selectChange.getString( "B相电压(V)" );
                    ib++;
                }
                selectChange.beforeFirst();
                while ( selectChange.next() ){
                    cPhaseVol [ic] =  selectChange.getString( "C相电压(V)" );
                    ic++;
                }
                selectChange.beforeFirst();
                int ca=0;int cb=0; int cc=0;
                selectChange.beforeFirst();
                while (selectChange.next()){
                    aPhaseCurrent[ca] = selectChange.getString("A相电流(A)");
                    ca++;
                }
                selectChange.beforeFirst();
                while (selectChange.next()){
                    bPhaseCurrent[cb] = selectChange.getString("B相电流(A)");
                    cb++;
                }
                selectChange.beforeFirst();
                while (selectChange.next()){
                    cPhaseCurrent[cc] = selectChange.getString("C相电流(A)");
                    cc++;
                }
                int ed=0;
                selectChange.beforeFirst();
                while (selectChange.next()){
                    phaseTime[ed] = selectChange.getString("时间");
                    ed++;
                }
                treeExpanded(cc,sortedList.getSelectedValue().toString());
                for (int mc=0;mc<cc;mc++){
                    double aPhaseVolDbl = Double.parseDouble(aPhaseVol[mc]);
                    double bPhaseVolDbl = Double.parseDouble(bPhaseVol[mc]);
                    double cPhaseVolDbl = Double.parseDouble(cPhaseVol[mc]);
                    double sumOfsQuares = Math.pow(aPhaseVolDbl, 2)+Math.pow(bPhaseVolDbl, 2)+
                    Math.pow(cPhaseVolDbl, 2);
                    double availableVolChange = (Math.pow(aPhaseVolDbl, 4)+Math.pow(bPhaseVolDbl,4)+
                    Math.pow(cPhaseVolDbl,4))/Math.pow(sumOfsQuares,2);
                    double underSubtraction = 3-6*availableVolChange;
                    double publicPortion = Math.sqrt(underSubtraction);
                    double underDivision = (1-publicPortion)/(1+publicPortion);
                    double voltageUnbalance = Math.sqrt(underDivision);
                    float aPhaseCurrentInt = Float.parseFloat(aPhaseCurrent[mc]);
                    float bPhaseCurrentInt = Float.parseFloat(bPhaseCurrent[mc]);
                    float cPhaseCurrentInt = Float.parseFloat(cPhaseCurrent[mc]);
                    float minPhaseCurrent;
                    float maxPhaseCurrent;
                    double loadRate = 0;
                    if (aPhaseCurrentInt>bPhaseCurrentInt){
                        minPhaseCurrent = bPhaseCurrentInt;
                        maxPhaseCurrent = aPhaseCurrentInt;
                    }
                    else {
                        minPhaseCurrent = aPhaseCurrentInt;
                        maxPhaseCurrent = bPhaseCurrentInt;
                    }
                    if (minPhaseCurrent>cPhaseCurrentInt){
                        minPhaseCurrent = cPhaseCurrentInt;
                    }
                    if (maxPhaseCurrent<cPhaseCurrentInt){
                        maxPhaseCurrent = cPhaseCurrentInt;
                    }
                    if (ratedCurrentFlt==0.0){
                        loadRate=0;
                    }
                    else {
                        loadRate = maxPhaseCurrent/(ratedCurrentFlt/(0.4*1.732));
                    }
                    double CurrentImbalance = (maxPhaseCurrent-minPhaseCurrent)/maxPhaseCurrent;
                    DecimalFormat nfChange   =   new DecimalFormat   ( "0.000 ");
                    stmt.executeUpdate("update 整点数据 set 电压不平衡度 =" +
                    "'"+nfChange.format(voltageUnbalance)+"' where 时间='"+phaseTime[mc]+"' " +
                    "and 设备号='"+sortedList.getSelectedValue().toString()+"'");                stmt.executeUpdate("update 整点数据 set 电流不平衡度 =" +
                    "'"+nfChange.format(CurrentImbalance)+"' where 时间='"+phaseTime[mc]+"' " +
                    "and 设备号='"+sortedList.getSelectedValue().toString()+"'");                stmt.executeUpdate("update 整点数据 set 负载率 ='"+nfChange.format(loadRate)+"' " +
                    "where 时间='"+phaseTime[mc]+"'" +
                    "and 设备号='"+sortedList.getSelectedValue().toString()+"'");
                }
            try {                            //确定起始时间和结束时间的取值范围;
                select =  stmt.executeQuery("select * from 整点数据 where 时间 >='"+startTime+"' " +
                               "and 时间<='"+endTime+"'and 设备号='"+sortedList.getSelectedValue().toString()+"'");
                rsmd = select.getMetaData();
            } catch (SQLException e1) {
                System.out.print("数据库刷新整点数据异常");
            }
                 Vector columnHeads = new Vector();         //Table表1取数据库列表
                 Vector rows = new Vector();
            try {
                    for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
                         columnHeads.addElement(rsmd.getColumnName(i));
                         while ( select.next() )
                         {
                            Vector currentRow = new Vector();
                            for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
                            {
                                currentRow.addElement(select.getString( i ) );
                            }
                                rows.addElement(currentRow);
                         }
            } catch (SQLException e1) {
                System.out.print("数据库连接整点数据异常");
            }
                defaultTableModel.setDataVector(rows,columnHeads);
                defectsTable.setModel(defaultTableModel);
                {
                    TableColumnModel columns = defectsTable.getColumnModel();
                    for (int m =0;m<23;m++){   //列块设定
                        TableColumn column = columns.getColumn(m);
                        if (m==0){
                            column.setPreferredWidth(150);
                        }
                        else if (m==6||m==12||m==18){
                            column.setPreferredWidth(120);
                        }
                        else {
                            column.setPreferredWidth(80);
                        }
                    }
                }
            } catch (Exception ex) {
                System.out.print("数据库连接异常");
            }}
      

  5.   

    我使用了DefaultTabelModel来生成JTable,你的意思是直接用ResultTable根据数据库指针来生成?