Событие изменения свойства индикатора выполнения не срабатывает

Я использую JProgressBar для отображения хода загрузки данных из базы данных. Я использую класс SwingWorker для загрузки данных в фоновом потоке, используя Tutorial!

Событие изменения свойства ProgressBar моего приложения не срабатывает.

Подскажите пожалуйста, что я делаю не так???.

Ниже приведен SSCCE кода, который я пытаюсь использовать, выглядит следующим образом.

public final class JProgressBarApplication {

    //private static org.jdesktop.swingx.JXDatePicker dpDate;
    javax.swing.JPanel pnlDate;
    JLabel label;
    JProgressBar pb;
    boolean taskDone=false;
    LongRunProcess lrpTask;

    public static void main(String... aArgs) {
        JProgressBarApplicationapp = new JProgressBarApplication();
        app.buildAndDisplayGui();
    }

    // PRIVATE //
    private void buildAndDisplayGui() {

        JFrame frame = new JFrame("Test Frame");
        buildContent(frame);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    private static final class showDialog implements ActionListener {

        /**
        * Defining the dialog's owner JFrame is highly recommended.
        */
        showDialog(JFrame aFrame) {    
            Date serverDate = null;
            fFrame = aFrame;    

        }

        public void GetData() {    
        // Code To Get Data From DB    
        }

        public void actionPerformed(ActionEvent aEvent) {

            JOptionPane.showMessageDialog(fFrame, "This is a dialog");
        }
        private JFrame fFrame;
    }

    private void buildContent(JFrame aFrame) {

        JPanel panel = new JPanel();

        panel.add(new JLabel("Hello"));

        JButton ok = new JButton("OK");
        ok.addActionListener(new MinimalSwingApplication.showDialog(aFrame));
        panel.add(ok);

        pb = new JProgressBar(0, 20);
        pb.setValue(0);
        pb.setStringPainted(true);
        aFrame.addWindowListener(new java.awt.event.WindowAdapter() {

            public void windowOpened(java.awt.event.WindowEvent evt) {
                formWindowOpened(evt);
            }
        });
        pb.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                pbPropertyChange(evt);
            }
        });         

        aFrame.getContentPane().add(panel);
        aFrame.getContentPane().add(pb);
        aFrame.getContentPane().add(label);
    }

    private void formWindowOpened(java.awt.event.WindowEvent evt) {

        // TODO add your handling code here:
        lrpTask = new LongRunProcess(this, "1", 0);
        taskDone =false;
        lrpTask.execute();
        lrpTask.addPropertyChangeListener(pb.getPropertyChangeListeners()[0]);
    }

    private void pbPropertyChange(java.beans.PropertyChangeEvent evt) {
        // TODO add your handling code here:
        if (!taskDone) {
            if (lrpTask !=null) {
                int progress = lrpTask.getProgress();
                pb.setValue(progress);
                String str = "<html>" + "<font color=\"#FF0000\">" + "<b>" + 
                String.format( "Completed %d%% of task.\n", progress) + "</b>" + "</font>" + "</html>";
                if (lrpTask.getProgress()==100) {
                    done() ;
                }
            }
        }
    }

    public void done() {
        //Tell progress listener to stop updating progress bar.
        taskDone = true;
        Toolkit.getDefaultToolkit().beep();
        pb.setValue(pb.getMinimum());
        String str = "<html>" + "<font color=\"#FF0000\">" + "<b>" + " Form Loading completed." + "</b>" + "</font>" + "</html>";
        label.setText(str);
    }      
}

class LongRunProcess extends SwingWorker {
    /**
     * @throws Exception
     */
    MinimalSwingApplication frm;
    String mID=null;
    int rowNo=0 ;
    LongRunProcess(MinimalSwingApplication jframe,String mID_,int rowNo_) {
        frm =jframe;
        mID=mID_;
        rowNo=rowNo_ ;
    }
    @Override
    protected Object doInBackground() throws Exception {
        Integer result = 0;               

        try {                        
            frm.GetData();                       
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }
}

Изменить: с ответом @mKorbel

Я использую следующую функцию

 private void getLongRunningTask(String id_ ,int row_){
  final String id=id_;
  final int row=row_;
    Thread process=  new Thread(new Runnable() {
      @Override
        public void run() {
      GetData(id,row);
      }
  });
  process.start();

}

Вместо использования объекта SwingWorker Раньше.

  lrpTask = new LongRunProcess(this, "1", 0);
  taskDone =false;
  lrpTask.execute();

Получите следующие исключения

    debug:
    /JewelleryERPApplication/build/classes/java.lang.ArrayIndexOutOfBoundsException: 8 >= 8
at java.util.Vector.elementAt(Vector.java:470)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:294)
at Utilities.Utility.ChangeJTableColumnSize(Utility.java:304)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.RefreshReplicateDetailJTable(RcvGoodsFromFiler.java:2850)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.GetDetailData(RcvGoodsFromFiler.java:496)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.GetData(RcvGoodsFromFiler.java:638)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler$13.run(RcvGoodsFromFiler.java:3323)
at java.lang.Thread.run(Thread.java:722)
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.elementAt(Vector.java:470)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:294)
at sun.swing.SwingUtilities2.convertColumnIndexToModel(SwingUtilities2.java:1841)
at javax.swing.JTable.convertColumnIndexToModel(JTable.java:2585)
at javax.swing.JTable.getColumnClass(JTable.java:2701)
at javax.swing.plaf.synth.SynthTableUI$SynthTableCellRenderer.getTableCellRendererComponent(SynthTableUI.java:790)
at javax.swing.JTable.prepareRenderer(JTable.java:5735)
at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:684)
at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:581)
at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:365)
at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:276)
at javax.swing.JComponent.paintComponent(JComponent.java:778)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
at                        javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at   java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 14 >= 0
at java.util.Vector.elementAt(Vector.java:470)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:294)
at javax.swing.plaf.basic.BasicTableHeaderUI.paint(BasicTableHeaderUI.java:648)
at javax.swing.plaf.synth.SynthTableHeaderUI.paint(SynthTableHeaderUI.java:173)
at javax.swing.plaf.synth.SynthTableHeaderUI.update(SynthTableHeaderUI.java:144)
at javax.swing.JComponent.paintComponent(JComponent.java:778)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
at  javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at  java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    Exception in thread "Thread-44" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.removeElementAt(Vector.java:554)
at javax.swing.table.DefaultTableColumnModel.removeColumn(DefaultTableColumnModel.java:151)
at javax.swing.JTable.createDefaultColumnsFromModel(JTable.java:1286)
at javax.swing.JTable.tableChanged(JTable.java:4389)
at javax.swing.JTable.setModel(JTable.java:3691)
at  jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.GetDetailData(RcvGoodsFromFiler.java:582)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.GetData(RcvGoodsFromFiler.java:642)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler$13.run(RcvGoodsFromFiler.java:3323)
at java.lang.Thread.run(Thread.java:722)
    java.lang.IllegalArgumentException: Identifier not found
at javax.swing.table.DefaultTableColumnModel.getColumnIndex(DefaultTableColumnModel.java:282)
at javax.swing.JTable.getColumn(JTable.java:2564)
at Utilities.Utility.AddingExtraColumnsAndComboForViews(Utility.java:2513)
at Utilities.Utility.RefreshReplicatedDataAndHeader(Utility.java:2307)
at  jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.RefreshReplicateDetailJTable(RcvGoodsFromFiler.java:2804)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.GetDetailData(RcvGoodsFromFiler.java:496)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.GetData(RcvGoodsFromFiler.java:638)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler$13.run(RcvGoodsFromFiler.java:3323)
at java.lang.Thread.run(Thread.java:722)
    Exception in thread "Thread-49" java.lang.NumberFormatException: For input string: "E2856D+RWN"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at  jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.CalcWeight(RcvGoodsFromFiler.java:774)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.GetData(RcvGoodsFromFiler.java:652)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler$13.run(RcvGoodsFromFiler.java:3323)
at java.lang.Thread.run(Thread.java:722)
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 7 >= 1
at java.util.Vector.elementAt(Vector.java:470)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:294)
at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:577)
at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:365)
at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:276)
at javax.swing.JComponent.paintComponent(JComponent.java:778)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JViewport.paint(JViewport.java:725)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at  java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    Exception in thread "Thread-50" java.lang.NumberFormatException: For input string: "E2856D+RWN"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.CalcWeight(RcvGoodsFromFiler.java:774)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.GetData(RcvGoodsFromFiler.java:652)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler$13.run(RcvGoodsFromFiler.java:3323)
at java.lang.Thread.run(Thread.java:722)
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 8 >= 4
at java.util.Vector.elementAt(Vector.java:470)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:294)
at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:577)
at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:365)
at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:276)
at javax.swing.JComponent.paintComponent(JComponent.java:778)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
at  javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    Exception in thread "Thread-56" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.removeElementAt(Vector.java:554)
at javax.swing.table.DefaultTableColumnModel.removeColumn(DefaultTableColumnModel.java:151)
at javax.swing.JTable.createDefaultColumnsFromModel(JTable.java:1286)
at javax.swing.JTable.tableChanged(JTable.java:4389)
at javax.swing.JTable.setModel(JTable.java:3691)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.GetDetailData(RcvGoodsFromFiler.java:582)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.GetData(RcvGoodsFromFiler.java:642)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler$13.run(RcvGoodsFromFiler.java:3323)
at java.lang.Thread.run(Thread.java:722)

Изменить для исключений генерации кода

Пример исключения 1

    .ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.removeElementAt(Vector.java:554)
at javax.swing.table.DefaultTableColumnModel.removeColumn(DefaultTableColumnModel.java:151)
at javax.swing.JTable.createDefaultColumnsFromModel(JTable.java:1286)
at javax.swing.JTable.tableChanged(JTable.java:4389)
at javax.swing.JTable.setModel(JTable.java:3691)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.GetDetailData(RcvGoodsFromFiler.java:493)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.GetData(RcvGoodsFromFiler.java:638)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler$13.run(RcvGoodsFromFiler.java:3380)

Код, при котором произошло исключение

    DefaultTableModel dtm = new DefaultTableModel(data_RcvGoodsFromFilerDt, header_RcvGoodsFromFilerDt);

     tblDetailInfo.setModel(dtm);

Пример исключения 2

   Exception in thread "Thread-6" java.lang.NumberFormatException: For input string: "12.950"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at jewelleryerpapplication.GUI.Gold.RcvGoodsFromFiler.CalcWeight(RcvGoodsFromFiler.java:774)

Код, при котором произошло исключение

   qt += Integer.parseInt( tblDetailInfo.getValueAt(r, 8).toString() );

    Some Exceptions occured at unknown Code Point

    at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)

person Syed Muhammad Mubashir    schedule 24.11.2012    source источник
comment
На какой части ты застрял? Как бы то ни было, ваш приведенный выше код не соответствует стандарту SSCCE, поскольку для него требуется как минимум один неосновной класс Java и много кода, не связанного с основной проблемой, что затрудняет просмотр и понимание вашей основной проблемы. . Кроме того, я пока не вижу никаких фоновых потоков или использования SwingWorker.   -  person Hovercraft Full Of Eels    schedule 24.11.2012
comment
На самом деле индикатор выполнения начинается, когда мои данные загружаются, не выполняя мое требование.   -  person Syed Muhammad Mubashir    schedule 24.11.2012
comment
Я хочу, чтобы Progress Bar работал параллельно с функцией getData(), что мне делать для этого   -  person Syed Muhammad Mubashir    schedule 24.11.2012
comment
Я удаляю несвязанный код сейчас   -  person Syed Muhammad Mubashir    schedule 24.11.2012
comment
Опять же, используете ли вы SwingWorker для загрузки данных в фоновом потоке?   -  person Hovercraft Full Of Eels    schedule 24.11.2012
comment
Нет, я не использую SwingWorker   -  person Syed Muhammad Mubashir    schedule 24.11.2012
comment
Тогда это, вероятно, решение, которое вы ищете. Если вы хотите параллелизма, а также не хотите замораживать свой графический интерфейс, вы должны использовать фоновую многопоточность. SwingWorker упрощает это, а также прекрасно сочетается с JProgressBars. Пожалуйста, ознакомьтесь с учебными пособиями, которые показывают только это.   -  person Hovercraft Full Of Eels    schedule 24.11.2012
comment
давайте продолжим это обсуждение в чате   -  person Syed Muhammad Mubashir    schedule 24.11.2012
comment
Вы никогда не устанавливали прогресс в своем SwingWorker. Используйте метод setProgress, и он будет запускать события   -  person Robin    schedule 24.11.2012
comment
@SyedMuhammadMubashir Взгляните на код в этом примере: stackoverflow.com/questions/13525171/ . Проблема в том, что вы не публикуете промежуточный результат.   -  person Guillaume Polet    schedule 24.11.2012
comment
Пожалуйста, отредактируйте свой вопрос и отформатируйте код, чтобы сделать его как минимум читабельным (соблюдение соглашений об именах java также может помочь его удобочитаемости ;-) - и не забудьте сделать его SSCCE, как уже упоминалось. !   -  person kleopatra    schedule 24.11.2012
comment
Возможный дубликат обновления JProgressBar из SwingWorker   -  person trashgod    schedule 24.11.2012
comment
@GuillaumePolet, как я могу использовать ваш пример, поскольку вы использовали пример SwingWorker‹void, Integer›, также процесс принимает List‹Integer› в качестве параметра, чего нет в моем случае.   -  person Syed Muhammad Mubashir    schedule 26.11.2012
comment
@Robin, вы можете сказать, как я могу использовать цикл, который вы использовали для имитации длительной задачи, если моя длительная задача - это транзакция выбора БД. как в вашем примере!   -  person Syed Muhammad Mubashir    schedule 26.11.2012
comment
@SyedMuhammadMubashir Прочтите Javadoc SwingWorker. Метод process имеет тип process(List<V> chunks) , где V — аргумент первого типа SwingWorker. Хотя вы можете использовать этот тип и метод process для указания текущего хода вашей работы, вы также можете использовать setProgress и присоединить PropertyChangelistener к свойству 'progress' SwingWorker для обновления пользовательского интерфейса. Важно убедиться, что ваша задача сообщает о промежуточном прогрессе.   -  person Guillaume Polet    schedule 26.11.2012
comment
Посмотрите мое последнее редактирование вопроса с использованием Runnable Thread, и я получаю кучу исключений, поскольку в своем ответе он упомянул, что Runnable лучше, чем SwingWorker.   -  person Syed Muhammad Mubashir    schedule 26.11.2012


Ответы (2)


@mKorbel процитировал много поучительных примеров, но ключом является вызов setProgress() из рабочего doInBackground(). SwingWorker выполняет необходимую синхронизацию. Несколько полезных ответов расширяют тему в этом связанном Вопросах и ответах, включая ссылку на этот пример.

person trashgod    schedule 24.11.2012
comment
пример, который вы показываете, использует Thread.Sleep() для отображения медленного процесса в методе doInBackGound SwingWorker, но я использую просто длительную транзакцию базы данных, время которой мне неизвестно. Можете ли вы сказать, как удовлетворить эту проблему. @trashgod - person Syed Muhammad Mubashir; 26.11.2012
comment
Этот пример показывает executeQuery(). Он также добавляет немного Thread.sleep() для имитации задержки. - person trashgod; 26.11.2012
comment
вы показали, что приведенный выше пример делает то же самое и реализует ту же логику в цикле набора результатов. В моем случае я не знаю время завершения моего запроса, так как это результат выполнения некоторого тяжелого хранимого процесса. @trashgod - person Syed Muhammad Mubashir; 26.11.2012
comment
ваш, и в этом примере используется SwingWorker‹List‹Double›, Double›, поскольку я использую Simple SwingWorker() - person Syed Muhammad Mubashir; 26.11.2012
comment
в моем случае frm.GetData() является результатом выполнения многих sps и обновления многих моделей таблиц в моей форме. - person Syed Muhammad Mubashir; 26.11.2012
comment
Как я могу использовать ваш for (int i = 1; i ‹= N; i++) { x = x - (((x * x - 2) / (2 * x))); setProgress(i * (100/N)); опубликовать (Double.valueOf (x)); Thread.sleep(1000); // имитация задержки } return Double.valueOf(x); так как вместо Thread.sleep(1000) frm.GetData() в моем случае содержит много выполнения Stored procs с неизвестным временем. - person Syed Muhammad Mubashir; 26.11.2012
comment
Это означает, что я не могу использовать цикл - person Syed Muhammad Mubashir; 26.11.2012
comment
Да, примеры надуманы, чтобы показать процент выполнения. Вы можете запросить количество строк в начале цикла и использовать его в знаменателе setProgres(). - person trashgod; 26.11.2012

person mKorbel    schedule 24.11.2012
comment
+1 В меня попала вторая пуля, но это всего лишь ранение в кожу. :-) - person trashgod; 24.11.2012
comment
Этот ответ сравнивает SwingWorker и Runnable для аналогичных действий с этим примером. Я не могу понять, как использовать этот пример, поскольку вы использовали метод ожидания, и я использую медленные транзакции базы данных. С помощью SwingWorker скорость моего приложения значительно улучшилась, но в некоторых случаях генерируются исключения @mKorbel - person Syed Muhammad Mubashir; 26.11.2012
comment
@mKorbel, пожалуйста, посмотрите исключения, которые я отредактировал в своем вопросе с помощью runnable. - person Syed Muhammad Mubashir; 26.11.2012
comment
все массивы, начинающиеся с нуля (0:-), отладьте это, поскольку вы помещаете 9 элементов в 8-ю модель, лучше отредактировать свой вопрос с помощью кода, сгенерированного для этой проблемы. - person mKorbel; 26.11.2012
comment
@mKorbel Вопрос был отредактирован с кодом, генерирующим исключения. - person Syed Muhammad Mubashir; 26.11.2012
comment
(Я думаю) никогда не менять модель из события моделей, смогли ли вы 1) никогда не анализировать объекты из JTable или столбца изменения модели в Double, тестирование с помощью добавления TableModelListener, использование System.out.println() - person mKorbel; 26.11.2012
comment
убедитесь, что исключения этого типа касаются только забавных/сумасшедших опечаток в коде, уверен, что я делал это 1 миллион раз, - person mKorbel; 26.11.2012
comment
и они приходят только несколько раз. Когда я обновляю свою форму чаще. - person Syed Muhammad Mubashir; 26.11.2012
comment
???? whaaaats :-) :-) When i refresh my form more frequently. тогда должна быть проблема параллелизма, нужно отлаживать и правильно синхронизировать код от/до, конечно, в большинстве случаев лучше написать новый код и забыть о старом - person mKorbel; 26.11.2012
comment
@mKorbel, не могли бы вы рассказать, как обновить модель, если я загружаю последние данные из базы данных. - person Syed Muhammad Mubashir; 26.11.2012
comment
@mKorbel, можете ли вы сказать, как справиться с параллелизмом в моем случае? - person Syed Muhammad Mubashir; 26.11.2012
comment
понятия не имею, но вы можете начать с отличного кода @camickr< /а> - person mKorbel; 26.11.2012
comment
Я попробовал process.sleep(10), и это работает для меня. Спасибо за ваше ценное руководство. - person Syed Muhammad Mubashir; 26.11.2012
comment
обратите внимание, что process.sleep(10) находится под задержкой, правильное значение превышает 15-21 для платформы Windows, - person mKorbel; 26.11.2012
comment
какое значение лучше для 17,18,19,20 или 21 - person Syed Muhammad Mubashir; 26.11.2012
comment
Я пробовал 20 и теперь все исключения устранены, теперь еще раз спасибо. - person Syed Muhammad Mubashir; 26.11.2012