Results 1 to 4 of 4
Thread: JPanel won't update
- 11-17-2007, 04:02 AM #1
Member
- Join Date
- Nov 2007
- Location
- Bay Area, CA
- Posts
- 13
- Rep Power
- 0
JPanel won't update
Hello,
Everything in my applet works except for one thing - When I click the JButton and the event takes place, it is supposed to change a JPanel to say "please wait", but instead, it freezes up for a few seconds while it completes the next commands and goes to the JPanel that is supposed to display after the commands are made, completly bypassing the "please wait" JPanel. The code looks like this:
Java Code:public void actionPerformed(ActionEvent pt) { if(pt.getSource() == init_Button) { overallLayout.show(cardPanel, "2"); // please wait JPanel try { // Construct data String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8"); // Send data URL url = new URL("http://www.loaded-designs.com/posttest/posttest.php"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(data); wr.flush(); // Get the response BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = rd.readLine()) != null) { getback_Label.setText("The PHP variables are below:"); getback_Label2.setText(line); System.out.println(line); overallLayout.show(cardPanel, "3"); } wr.close(); rd.close(); } catch (Exception ex) { ex.printStackTrace(); } } }
Thank you very much,
- Jeff
- 11-17-2007, 05:32 AM #2
Swing works with the event dispatch thread (EDT). It is an attempt to make sure all events occur in proper sequence by having a single queue for all requests to wait in. So doing a time-consuming task like reading data over a network makes everything else wait until the long-running task completes. This has the net affect of freezing the gui and dis-allowing any gui updates to take place while the edt is busy with the long-running task. The solution is to do these long-running tasks on a background thread.
For example:
Java Code:public void actionPerformed(ActionEvent pt) { if(pt.getSource() == init_Button) { overallLayout.show(cardPanel, "2"); // please wait JPanel loadData(); } } private void loadData() { Thread thread = new Thread(new Runnable() { public void run() { try { // Construct data String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8"); // Send data URL url = new URL("http://www.loaded-designs.com/" + "posttest/posttest.php"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(data); wr.flush(); // Get the response BufferedReader rd = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = rd.readLine()) != null) { getback_Label.setText("The PHP variables are below:"); getback_Label2.setText(line); System.out.println(line); overallLayout.show(cardPanel, "3"); } wr.close(); rd.close(); } catch (Exception ex) { ex.printStackTrace(); } } }); // Keep gui responsive to user input. thread.setPriority(Thread.NORM_PRIORITY); // 5, EDT = 6 thread.start(); }
- 11-19-2007, 05:42 AM #3
Member
- Join Date
- Nov 2007
- Location
- Bay Area, CA
- Posts
- 13
- Rep Power
- 0
hey, thanks hardwired, that helps alot!
However, it won't let me compile... it tells me that "public void run()" is an illegal start of expression... how can I fix this?
My code currently looks like this:
Java Code:private void loadData() { Thread thread = new Thread(new Runnable()); { public void run() { try { // Construct data String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8"); // Send data URL url = new URL("http://www.loaded-designs.com/" + "posttest/posttest.php"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(data); wr.flush(); // Get the response BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = rd.readLine()) != null) { getback_Label.setText("The PHP variables are below:"); getback_Label2.setText(line); System.out.println(line); overallLayout.show(cardPanel, "3"); } wr.close(); rd.close(); } catch (Exception ex) { ex.printStackTrace(); } } // Keep gui responsive to user input. thread.setPriority(Thread.NORM_PRIORITY); // 5, EDT = 6 thread.start(); } } }
Thank you very much!
- JeffLast edited by ibanez270dx; 11-19-2007 at 05:53 AM.
- 01-06-2009, 09:59 PM #4
Member
- Join Date
- Jan 2009
- Posts
- 1
- Rep Power
- 0
Mismatched Braces
ibanez270dx:
By my count, you have one too many } . Though I'm hoping you figured that out a year ago...
Also, notice on the line :
Thread thread = new Thread(new Runnable()
that hardwired didn't close off the Thread() arguements on that same line. It shouldn't get closed off until right before you set thread priority toward the end. Essentially all of the code for the load Data is an argument for the new Thread(). That would be another issue with what you posted.
:)Last edited by ShaggyTDawg; 01-06-2009 at 10:08 PM.
Similar Threads
-
How to update data for a JPA many-to-many relationship?
By abhijit.sarkar in forum Enterprise JavaBeans (EJB)Replies: 1Last Post: 11-04-2008, 09:48 AM -
Using sql:update tag
By Java Tip in forum Java TipReplies: 0Last Post: 01-14-2008, 12:49 AM -
Java Update Installation
By guest in forum New To JavaReplies: 1Last Post: 12-01-2007, 05:36 AM -
Java Crashes on Mac 10.3.9 not sure how to update
By patricknowow in forum New To JavaReplies: 1Last Post: 11-30-2007, 04:57 AM -
dynamic update in swt
By sandor in forum SWT / JFaceReplies: 0Last Post: 05-14-2007, 09:32 PM
Bookmarks