दिलचस्प पोस्ट
मैं अजगर के साथ मेरी डेस्कटॉप पृष्ठभूमि कैसे बदल सकता / सकती हूं? std :: shared_ptr धागा सुरक्षा चिकना जीपीएस डेटा गैर-मानक मूल्यांकन (एनएसई) में dplyr के फिल्टर_ और MySQL से डेटा खींच रहा है रूबी में निर्दिष्ट आकार के उप arrays के लिए arrays को विभाजित करने की आवश्यकता है विभिन्न उपकरणों के लिए एकल आकार कक्षा में आईओएस भिन्न फ़ॉन्ट आकार कैसे एक समग्र प्राथमिक कुंजी (जावा दृढ़ता एनोटेशन) बनाने के लिए आर में अपवाद हैंडलिंग PostgreSQL में समूह भूमिका के लिए डीबी में एक विशिष्ट स्कीमा के लिए सभी को अनुदान दें जावा संग्रह सॉर्ट करें "क्षमा की अनुमति नहीं पूछो" – समझाएं मैं PHP में कंसोल को कैसे लिख सकता हूं? दो टुकड़ों के बीच बुनियादी संचार नींद का उपयोग किए बिना वेब पृष्ठ लोड होने पर पता लगाएं मैं एक पहले से खोला हुआ फ़ाइल कैसे खोलता हूं, जो कि नेट स्ट्रीम रीडर के साथ है?

मैं अपना स्विंग वर्कर उदाहरण कैसे ठीक से काम कर सकता हूं?

मैंने यह कैसे काम करता है से परिचित होने के लिए अपना खुद का स्विंगवॉर्कर उदाहरण बनाया है

मैं जो करना चाहता हूं वह निम्न है: जब बटन क्लिक किया जाता है, तब तक मुझे एक प्रगति पट्टी दिखनी चाहिए जब तक कार्य पूरा नहीं हो जाता, मैं बस प्रगति पट्टी को हटाना और संवाद को एक स्ट्रिंग जोड़ना चाहता हूं।

जब बटन क्लिक किया जाता है, तो प्रगति बार ऊपर आता है लेकिन कभी भी दूर नहीं जाता। (10 सेकंड के बाद कभी प्रगति बार नहीं निकालता है और लेबल को कभी भी नहीं)

यहां एक एसएससीसीई है:

package swingtesting; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JProgressBar; import javax.swing.SwingWorker; public class SwingTesting { /** * Creates a frame that will hold a simple button to make use of SwingWorker */ public static void main(String[] args) { // TODO code application logic here JFrame frame = new JFrame(); JButton button = new JButton(); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new GuiWorker().execute(); } }); button.setText("Test Me"); frame.getContentPane().add(button); frame.pack(); frame.setVisible(true); } } class GuiWorker extends SwingWorker<Integer, Integer> { /* * This should just create a frame that will hold a progress bar until the * work is done. Once done, it should remove the progress bar from the dialog * and add a label saying the task complete. */ private JFrame frame = new JFrame(); private JDialog dialog = new JDialog(frame, "Swingworker test", true); private JProgressBar progressBar = new JProgressBar(); public GuiWorker() { progressBar.setString("Waiting on time"); progressBar.setStringPainted(true); progressBar.setIndeterminate(true); dialog.getContentPane().add(progressBar); dialog.pack(); dialog.setVisible(true); } @Override protected Integer doInBackground() throws Exception { Thread.sleep(10000); return 0; } @Override protected void done() { JLabel label = new JLabel("Task Complete"); dialog.getContentPane().remove(progressBar); dialog.getContentPane().add(label); } } 

Solutions Collecting From Web of "मैं अपना स्विंग वर्कर उदाहरण कैसे ठीक से काम कर सकता हूं?"

यहां आपके कोड का एक अद्यतन संस्करण है जो काम करता है

 import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JProgressBar; import javax.swing.SwingWorker; public class SwingTesting { public static void main(String[] args) { EventQueue.invokeLater( new Runnable() { @Override public void run() { JFrame frame = new JFrame(); JButton button = new JButton(); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new GuiWorker().execute(); } }); button.setText("Test Me"); frame.getContentPane().add(button); frame.pack(); frame.setVisible(true); } } ); } } class GuiWorker extends SwingWorker<Integer, Integer> { /* * This should just create a frame that will hold a progress bar until the * work is done. Once done, it should remove the progress bar from the dialog * and add a label saying the task complete. */ private JFrame frame = new JFrame(); private JDialog dialog = new JDialog(frame, "Swingworker test", true); private JProgressBar progressBar = new JProgressBar(); public GuiWorker() { progressBar.setString("Waiting on time"); progressBar.setStringPainted(true); progressBar.setIndeterminate(true); dialog.getContentPane().add(progressBar); dialog.pack(); dialog.setModal( false ); dialog.setVisible(true); } @Override protected Integer doInBackground() throws Exception { System.out.println( "GuiWorker.doInBackground" ); Thread.sleep(1000); return 0; } @Override protected void done() { System.out.println("done"); JLabel label = new JLabel("Task Complete"); dialog.getContentPane().remove(progressBar); dialog.getContentPane().add(label); dialog.getContentPane().validate(); } } 

मुख्य बिंदु यह है कि जब तक संवाद का निपटारा नहीं किया जाता तब तक एक मॉडल संवाद दृश्यमान ब्लॉक सेट करता है। इसलिए इसे गैर-मोडल बनाकर तय किया गया + जब आप घटकों को स्विच करते हैं तो सामग्री फलक पर validate कॉल करें मैंने भी ईडीटी पर चलने के लिए अपनी मुख्य विधि को समायोजित कर दिया, और कुछ सिस्टम। यदि आप setModal( false ) कॉल को setModal( false ) हैं, तो आप देखेंगे कि उन बयानों को तब तक प्रिंट नहीं किया जाता जब तक कि आप संवाद बंद नहीं करते हैं

संवाद को गैर-मॉडल बनाने की कोई आवश्यकता नहीं है बस स्विंग वर्कर्स शुरू करने के बाद संवाद प्रदर्शित करें यह कॉलिंग क्लास से किया जा सकता है, जो पहले स्विंग वर्कर को निष्पादित करता है, पहले कॉलिंग निष्पादित करता है, और फिर डायलॉग दिखा रहा है, या इसे स्विंगवॉकर से किया जा सकता है, लेकिन अगर बाद वाले से, आपको अपना स्वयं का बनाना होगा छद्म-निष्पादित विधि जो सुपर के निष्पादन को कॉल करता है, और फिर संवाद दिखाता है। ध्यान दें कि आप अंकीय निष्पादित नहीं कर सकते क्योंकि यह अंतिम है

उदाहरण के लिए…

 import java.awt.CardLayout; import java.awt.Window; import java.awt.Dialog.ModalityType; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.concurrent.ExecutionException; import javax.swing.*; @SuppressWarnings("serial") public class SwingTesting2 { private static void createAndShowGui() { final JFrame frame = new JFrame("SwingTesting2"); final JDialog dialog = new JDialog(frame, "Dialog", ModalityType.APPLICATION_MODAL); final DialogPanel dialogPanel = new DialogPanel(); dialog.getContentPane().add(dialogPanel.getMainPanel()); dialog.pack(); dialog.setLocationRelativeTo(frame); JButton button = new JButton(new AbstractAction("Test Me") { @Override public void actionPerformed(ActionEvent actEvt) { final GuiWorker2 guiWorker = new GuiWorker2(); guiWorker.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent pcEvt) { if (pcEvt.getPropertyName().equals("state")) { if (pcEvt.getNewValue() == SwingWorker.StateValue.DONE) { try { dialogPanel.done(guiWorker.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } else if (pcEvt.getPropertyName().equals("progress")) { dialogPanel.setProgress((Integer)pcEvt.getNewValue()); } } }); guiWorker.execute(); dialogPanel.start(); dialog.setVisible(true); } }); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(button); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGui(); } }); } } class GuiWorker2 extends SwingWorker<Integer, Integer> { private static final int MAX_COUNT = 20; private static final long SLEEP_TIME = 100; private int count = 0; @Override protected Integer doInBackground() throws Exception { while (count < MAX_COUNT) { Thread.sleep(SLEEP_TIME); count++; setProgress((100 * count) / MAX_COUNT); } return count; } } @SuppressWarnings("serial") class DialogPanel { public static final String PROGRESS_BAR = "Progress Bar"; public static final String DONE = "Done"; private static final int TIMER_DELAY = 2000; private CardLayout cardLayout = new CardLayout(); private JPanel mainPanel = new JPanel(cardLayout); private JLabel doneLabel = new JLabel("Done", JLabel.CENTER); private JProgressBar progressBar = new JProgressBar(); public DialogPanel() { progressBar.setString("Waiting on time"); progressBar.setStringPainted(true); progressBar.setIndeterminate(false); mainPanel.add(progressBar, PROGRESS_BAR); mainPanel.add(doneLabel, DONE); } public void setProgress(Integer newValue) { progressBar.setValue(newValue); } public void start() { cardLayout.show(mainPanel, PROGRESS_BAR); progressBar.setValue(0); } public void done(int countValue) { doneLabel.setText(DONE + ". Count: " + countValue); cardLayout.show(mainPanel, DONE); new Timer(TIMER_DELAY, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Window win = SwingUtilities.getWindowAncestor(mainPanel); win.dispose(); } }){{setRepeats(false);}}.start(); } public JPanel getMainPanel() { return mainPanel; } }