When the user clicks the button, a long task is launched, lasting about 10 seconds. During this time, I want to show a progress bar to the user. But the main thread must wait for the workflow to complete, because the workflow will set the variable that the main thread will use. If I do not wait for the workflow, I will get a NullPointerException when using the variable. Therefore, after completing the work cycle, I will also close the progress bar dialog box.
When I wait for a workflow using join() , a progress bar dialog box appears (interestingly, without a progress bar) and hangs there.
Thread runnable = new Thread() { public void run() { try { System.out.println("thread basladi"); threadAddSlaveReturnMessage = request.addSlave( ipField.getText(), passField.getText(), nicknameField.getText()); System.out.println("thread bitti"); } catch (LMCTagNotFoundException e) { e.printStackTrace(); } } }; Thread runnable_progress = new Thread() { public void run() { JTextArea msgLabel; JDialog dialog; JProgressBar progressBar; final int MAXIMUM = 100; JPanel panel; progressBar = new JProgressBar(0, MAXIMUM); progressBar.setIndeterminate(true); msgLabel = new JTextArea("deneme"); msgLabel.setEditable(false); panel = new JPanel(new BorderLayout(5, 5)); panel.add(msgLabel, BorderLayout.PAGE_START); panel.add(progressBar, BorderLayout.CENTER); panel.setBorder(BorderFactory.createEmptyBorder(11, 11, 11, 11)); dialog = new JDialog(Frame.getFrames()[0], "baslik", true); dialog.getContentPane().add(panel); dialog.setResizable(false); dialog.pack(); dialog.setSize(500, dialog.getHeight()); dialog.setLocationRelativeTo(null); dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); dialog.setAlwaysOnTop(false); dialog.setVisible(true); msgLabel.setBackground(panel.getBackground()); } }; runnable.start(); System.out.println("runnable start"); runnable_progress.start(); System.out.println("progress start"); runnable.join(); System.out.println("runnable join"); runnable_progress.join(); System.out.println("progress join"); if (threadAddSlaveReturnMessage.equalsIgnoreCase("OK")) { fillInventoryTable(inventoryTable); JOptionPane.showMessageDialog(this, messages.getString("centrum.addslavepanel.SUCCESS"), null, JOptionPane.INFORMATION_MESSAGE); }
"connection of progress"
not printed.
source share