samppi - I don't suggest using SwingWorker for this unless you just want to practice using it for education's sake. The calculation time is effectively zero in an application like this where actions are user- triggered, so using SwingWorker is a case of unnecessary and premature optimization...and the calculation is so trivial, the overhead of starting a new thread is likely to exceed the time it takes to perform the calculation.
I'm not sure I understand your question at the end of the message, because I don't know what you are referring to by the "text-sampler- gui" thread, but I assume you mean the entire Swing app...if so, then no, you can start a Swing GUI from the main thread, and it will automatically start and use the UI thread. Usually that consists of calling the frame's setVisible method, which starts everything going. - Keith Bennett On Jan 24, 11:45 pm, samppi <rbysam...@gmail.com> wrote: > I'm trying to learn Swing, so I'm writing the most robust Celsius > converter app that I can. I've separated the conversion work into a > separate SwingWorker thread, so this requires Java 6. Does anyone have > any suggestions? > > (ns org.sample.play-with-swing.multithreaded-celsius-converter > (:import [javax.swing JFrame JLabel JTextField JButton SwingWorker > SwingUtilities] > [java.awt.event ActionListener] > [java.awt GridLayout])) > > (defn convert-c-to-f [celsius-text] > (when-not (empty? celsius-text) > (let [c (Double/parseDouble celsius-text)] > (str (+ 32 (* 1.8 c)))))) > > (defn c-to-f-worker [celsius-text-field fahrenheit-text-field] > (proxy [SwingWorker] [] > (doInBackground [] > (convert-c-to-f (.getText celsius-text-field))) > (done [] > (.setText fahrenheit-text-field (.get this))))) > > (defn celsius-gui [] > (let [frame (JFrame. "Celsius Converter") > celsius-text-field (JTextField.) > celsius-label (JLabel. "Celsius") > convert-button (JButton. "℃ to ℉") > fahrenheit-label (JLabel. "Fahrenheit") > fahrenheit-text-field (JTextField.)] > (.addActionListener convert-button > (proxy [ActionListener] [] > (actionPerformed [event] > (.execute (c-to-f-worker celsius-text-field fahrenheit- > text-field))))) > (doto frame > (.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE) > (.setLayout (GridLayout. 3 2 3 3)) > (.add celsius-text-field) > (.add celsius-label) > (.add fahrenheit-text-field) > (.add fahrenheit-label) > (.add convert-button) > (.setSize 300 100) > (.setVisible true)))) > > ; For thread safety, does the text-sampler-gui thread have to be > invoked from the event > ; dispatch thread? > (SwingUtilities/invokeLater celsius-gui) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---