Latest Tutorials| Questions and Answers|Ask Questions?|Site Map



Home Javatutorials Causing Deadlocks in Swing Code

Related Tutorials


 
 

Share on Google+Share on Google+

Causing Deadlocks in Swing Code

Advertisement
This page discusses - Causing Deadlocks in Swing Code,java newsletter,java,tutorial

Causing Deadlocks in Swing

At First Consider the Deadlocks
A deadlock is a situation where two or more competing process or action waiting for a single resources and each waiting to let others to finish. And none of them uses that resources. It is a common problem in multithreading.

Consider the Sample code given below the frame is being constructed by the static block and by adding  the new DesktopPain to the Content Pain it starts the Swing Thread . But the  JInternalFrame is also started with main Thread  at the Same Time. The Swing Thread tries to call the paintComponent method. Then it hangs by calling the static method.

Consider The Code

import java.awt.Graphics;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.SwingUtilities;

public class DeadLockClaz extends JFrame {

	private DeadLockClaz() {
		getContentPane().add(new DesktopPainClaz());
		setSize(400, 200);
		setTitle("DeadLock Example");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		new JInternalFrame();
	}

//	 Static Block
	static {
		new DeadLockClaz();
	}

	// Inner Private Class

	private static void myDeadlockMethod() {
		System.out.println("Dead Lock Occured");
	}

	private class DesktopPainClaz extends JDesktopPane {
		@Override
		protected void paintComponent(Graphics g) {
			// TODO Auto-generated method stub
			super.paintComponents(g);
			System.out.println("Calling Dead Lock Method");
			myDeadlockMethod();
			System.out.println("The Dead Lock is Called");
		}
	}

	public static void main(String[] args) {

	}
}

The main point to cause a deadlock is by calling a static from other thread, before static block is finished. However you can fix the code very easily, for example call the setVisible(true) method just after the returning the new JInternalFrame();. But one thing you can do to change our static block. The code given below will fix above deadlock problem.

static {
	    SwingUtilities.invokeLater(new Runnable() {
	      public void run() {
	        new DeadLockClaz();
	      }
	    });
	  }
So while writing the GUI component in Swing be sure that only the swing thread is changing or reading the GUI.
Advertisement

If you enjoyed this post then why not add us on Google+? Add us to your Circles



Liked it!  Share this Tutorial


Follow us on Twitter, or add us on Facebook or Google Plus to keep you updated with the recent trends of Java and other open source platforms.

Posted on: April 18, 2011

Related Tutorials

Discuss: Causing Deadlocks in Swing Code,java newsletter,java,tutorial  

Post your Comment


Your Name (*) :
Your Email :
Subject (*):
Your Comment (*):
  Reload Image
 
 
Comments:0
DMCA.com