报错部分为Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at ProgressBarRenderer.getTableCellRendererComponent(ProgressBarRenderer.java:33)
at javax.swing.JTable.prepareRenderer(JTable.java:5729)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2075)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1977)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1773)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
at javax.swing.JComponent.paintComponent(JComponent.java:763)
at javax.swing.JComponent.paint(JComponent.java:1027)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JViewport.paint(JViewport.java:747)
at javax.swing.JComponent.paintChildren(JComponent.java:864)
at javax.swing.JComponent.paint(JComponent.java:1036)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5122)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:277)
at javax.swing.RepaintManager.paint(RepaintManager.java:1217)
at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:803)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)at ProgressBarRenderer.getTableCellRendererComponent(ProgressBarRenderer.java:33)对应的代码为:
class ProgressBarRenderer extends DefaultTableCellRenderer{  
    private static final long serialVersionUID = 1L;  
    private JProgressBar b;  
    public ProgressBarRenderer(JProgressBar p){  
        super();  
        b = p ;
        setOpaque(true);  
        b = new JProgressBar();  
        //是否显示进度字符串  
        b.setStringPainted(true);  
        b.setMinimum(0);  
        b.setMaximum(100); 
        b.setValue(0);
        //是否绘制边框  
        b.setBorderPainted(true);  
        b.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));  
    }  
    public Component getTableCellRendererComponent(JTable table, Object value,  
            boolean isSelected, boolean hasFocus, int row, int column) {  
        Integer i = (Integer) value; 
        
//        String text = "";
//        super.getTableCellRendererComponent(table, text, isSelected, hasFocus,
//                row, column);
        
        b.setValue(i);  
        return b;  
    }  
}  
实在找不出来错误 麻烦各位大牛帮忙看下 谢谢

解决方案 »

  1.   

    空指向
    at ProgressBarRenderer.getTableCellRendererComponent(ProgressBarRenderer.java:33)GOOD LUCKy!
      

  2.   

    at ProgressBarRenderer.getTableCellRendererComponent(ProgressBarRenderer.java:33)对应的就是这行代码              b.setValue(i); 
    但是我初始化了吧
      

  3.   

    that you're updating your JTable or its model out of the Event-Dispatching Thread. Please read this chapter of the Swing tutorial. Really.
    刚在网上查到这个错误和JTable的有关 不知道如何修改
      

  4.   

    把private JProgressBar b;  改成private JProgressBar b = new JProgressBar();从构造器中删除该初始化试试。
      

  5.   

    改成private JProgressBar b = new JProgressBar(0,100)我试过 没用, 尝试在其他地方初始化然后传过去也试过 没用啊  是不是跟JTable有关呢  真心求解  网上查了很多都没办法
      

  6.   

    程序比较大  而且要配套的服务器 我截取一部分代码 流程如下:
    FtpFrame.addProgressBar(filename);  //先进入此函数public static void addProgressBar(String filename) {  
     Object[] rowData = new Object[7];
    rowData[0] = filename;
    rowData[1] = "filenames.size()";
    rowData[2] = "--->>";
    rowData[3] = "file";
    rowData[4] = "host";
    rowData[5] = "正在传输";
            model1.addRow(rowData); 
        }  继续运行FtpFrame.change(filename, p1);public static void change(String filename,int p)
    {
    int i = 0;
    boolean isdoing = true;
    while(isdoing){
            if(table1.getValueAt (i, 0)!=null ){
             System.out.println(table1.getValueAt (i, 0));
             if(table1.getValueAt (i, 0).equals(filename)){
             isdoing = false;
             }
             else{
             i++;
             }
            }
    }
    p1 = p;
    j = i;
    Thread t = new ProgressBarThread(table1,i,p);   
        t.start();
    table1.updateUI();
    }class ProgressBarThread extends Thread {  
    int index;
    int p1;
    JTable table1 = new JTable();
    public ProgressBarThread(JTable table,int i,int p){
        index = i; 
        table1 = table;
        p1 = p;
    }
        public void run() {  
                SwingUtilities.invokeLater(new Runnable(){  
                    public void run() {    
                        table1.setValueAt(p1, index, 6);
    //                    table1.updateUI();
                    }    
                });  
            }    
        } class ProgressBarRenderer extends DefaultTableCellRenderer{  
        private static final long serialVersionUID = 1L;  
        private JProgressBar b = new JProgressBar(0, 100);  
        public ProgressBarRenderer(){  
            super();  
    //        b = p ;
            setOpaque(true);  
            b = new JProgressBar();  
            //是否显示进度字符串  
            b.setStringPainted(true);  
    //        b.setMinimum(0);  
    //        b.setMaximum(100); 
    //        b.setValue(0);
            //是否绘制边框  
            b.setBorderPainted(true);  
            b.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));  
        }  
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            Integer i = (Integer) value;
            String text = "完成";
            if (i < 0) {
                //删除
                text = "取消完毕";
            } else if (i < 100) {
                b.setValue(i);
                return b;
            }
            super.getTableCellRendererComponent(table, text, isSelected, hasFocus,
                    row, column);
            return this;
        }
    }
      

  7.   

    程序的目的是将一个进度条嵌入到JTable中  通过一个线程控制进度条的百分比