Online Training Spring Hibernate Training in Delhi R Programming Training Course Big Data and Hadoop Training Java Training

Causing Deadlocks in Swing Code

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

Ads

Tutorials   
Java final method Assert in Java Final method in java Autoboxing in Java assert In Java JDBC batch insert using Java bean class Java Singleton Pattern Java Collection API - Java Tutorials Stack Overflow - Java Tutorials End of Year Puzzle The link to the outer class,java tutorial,java tutorials Orientating Components Right to Left,java newsletter,java,tutorial Non-virtual Methods in Java - java tutorials Multicasting in Java - java tutorials,tutorial Creation Time Comparison of Multi Dimensional Array- Java Tutorials Making Exceptions Unchecked - java tutorial,java tutorials Making Enumerations Iterable - JDK 5 Example Which is Faster - LinkedList or ArrayList? LinkedHashMap - Java Tutorials HashMap and HashCode JDK 1.4 the NullPointerException - Java Tutorials Java HashMap - Java Tutorials Java GC java awt package tutorial Java Multi Dimensions Array - Java Tutorials Java HashSet  - Java Tutorials Java Field Initialisation - Java Tutorials Java Comments - Java Tutorials J2EE Singleton Pattern - Design Pattern Tutorials Java - JDK Tutorials garbage collection in java Final Methods - Java Tutorials Exceptional Constructors - Java Tutorials Double-checked locking,java tutorials,java tutorial Disassembling Java Classes - Java Tutorials Java Deadlocks - Java Deadlocks Tutorials, Deadlocks in Java Commenting out your code - Java Tutorials Class names don't identify a class - Java Tutorials Causing Deadlocks in Swing Code Exception in Java - Java Tutorials Catching Exceptions in GUI Code - Java Tutorials boolean comparisons - tutorial Interthread Communication in Java BASIC Java - Java Tutorials Thread Deadlocks - Java Tutorials Autoboxing unboxing in Java - Java Tutorials Assertion in Java Appending Strings - Java Tutorials Anonymous Inner Classes - Anonymous Inner Classes tutorial Assertion in java
Ads

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.

Advertisements

Ads
Share on Google+Share on Google+

Causing Deadlocks in Swing Code

Posted on: April 18, 2011 If you enjoyed this post then why not add us on Google+? Add us to your Circles

Advertisements

Ads
 

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

Post your Comment


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

Ads

 

Ads