943,733 Members | Top Members by Rank

Ad:
  • Java Discussion Thread
  • Unsolved
  • Views: 498
  • Java RSS
May 7th, 2009
0

Threads

Expand Post »
I'm working on a program to upload some files to an ftp. I created a thread the starts the upload when the upload button is pushed. When the upload button is pushed the GUI freezes because it is uploading. What change would I have to make to get the GUI responsive so I can update the progress bar. Here is what method that creates the thread to upload the file. This is the method for the upload button

java Syntax (Toggle Plain Text)
  1. private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
  2. up.upload(jTextField1.getText());
  3. upload = new UploadThread(up,jTextField1.getText());
  4. UploadThr = new Thread(upload);
  5. UploadThr.start();
  6. }

This is called in the Gui. I need to get the GUI responsive while it is uploading.

Thanks
Similar Threads
Reputation Points: 10
Solved Threads: 0
Light Poster
functionalCode is offline Offline
32 posts
since May 2009
May 7th, 2009
0

Re: Threads

Essentially, you need to make sure that whatever call is blocking is actually inside the background thread. I don't know the library you're using, but I'm guessing that the call to up.upload() is blocking. (Put some logging on or run in the debugger to find out.)
Reputation Points: 120
Solved Threads: 7
Junior Poster in Training
neilcoffey is offline Offline
53 posts
since Dec 2008
May 8th, 2009
0

Re: Threads

I think that your main thread get blocked - My suggestion is an example:

Java Syntax (Toggle Plain Text)
  1. import java.awt.*;
  2. import java.io.*;
  3. import java.util.StringTokenizer;
  4. import javax.swing.*;
  5. import java.awt.event.*;
  6.  
  7. public class Test extends JFrame
  8. {
  9. JButton b1=new JButton("Start");
  10. JTextField t1=new JTextField("",20);
  11.  
  12. public Test() {
  13. super("Simple Program");
  14. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  15. getContentPane().setLayout(new FlowLayout());
  16.  
  17. getContentPane().add(t1);
  18. getContentPane().add(b1);
  19.  
  20. b1.addActionListener(new ActionListener() {
  21. public void actionPerformed(ActionEvent e) {
  22. try {
  23. new AnyAction(t1);
  24. }catch(Exception ex) { }
  25. }
  26. });
  27.  
  28. pack();
  29. setVisible(true);
  30. }
  31. public static void main(String[] args) {
  32. new Test();
  33. }
  34. }
  35. class AnyAction extends Thread
  36. {
  37. JTextField tx;
  38. int i=0;
  39. public AnyAction(JTextField t) {
  40. tx=t;
  41. start();
  42. }
  43. public void run() {
  44. while(true) {
  45. i++;
  46. tx.setText("" + i);
  47. }
  48. }
  49. }
Moderator
Reputation Points: 2136
Solved Threads: 1228
Posting Genius
adatapost is offline Offline
6,527 posts
since Oct 2008
May 13th, 2009
0

Re: Threads

In the program you give there is no problem of GUI blocking. Clearify the problem.
Reputation Points: 10
Solved Threads: 9
Light Poster
hardik.rajani is offline Offline
41 posts
since Apr 2009
May 13th, 2009
0

Re: Threads

Click to Expand / Collapse  Quote originally posted by evant8950 ...
I'm working on a program to upload some files to an ftp. I created a thread the starts the upload when the upload button is pushed. When the upload button is pushed the GUI freezes because it is uploading. What change would I have to make to get the GUI responsive
If the problem is that the GUI is frozen temporarily while some other task is being completed, you need to use a SwingWorker thread. Run the task that is freezing the GUI in the SwingWorker thread, and your GUI will not be frozen anymore.

Other SwingWorker info: http://java.sun.com/docs/books/tutor...cy/simple.html

(But if the problem is simply that the GUI is permanently frozen, then you have another problem). In the scenario where you'd use a SwingWorker thread, it'd be because you are trying to complete some time consuming task on the EDT, and as a result, your GUI (which executes on the EDT) would have to wait for that task to finish before it can continue. So be careful because if, for some reason, your upload method is blocking & you put it in a SwingWorker thread, your GUI will work again. . but it won't have solved your problem (your upload method will still block, it just won't affect the GUI). Basically, use a SwingWorker thread if there is some time consuming task that freezes the GUI temporarily.
Last edited by BestJewSinceJC; May 13th, 2009 at 11:45 am.
Reputation Points: 874
Solved Threads: 352
Posting Maven
BestJewSinceJC is offline Offline
2,758 posts
since Sep 2008

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in Java Forum Timeline: A Node question
Next Thread in Java Forum Timeline: outofbound error (arrays)





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC