Causing Deadlocks in Swing Code

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

Causing Deadlocks in Swing Code

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.

Tutorials

  1. Assertion in java
  2. Anonymous Inner Classes - Anonymous Inner Classes tutorial
  3. Appending Strings - Java Tutorials
  4. Assertion in Java
  5. Autoboxing unboxing in Java - Java Tutorials
  6. Thread Deadlocks - Java Tutorials
  7. BASIC Java - Java Tutorials
  8. Interthread Communication in Java
  9. boolean comparisons - tutorial
  10. Catching Exceptions in GUI Code - Java Tutorials
  11. Exception in Java - Java Tutorials
  12. Causing Deadlocks in Swing Code
  13. Class names don't identify a class - Java Tutorials
  14. Commenting out your code - Java Tutorials
  15. Java Deadlocks - Java Deadlocks Tutorials, Deadlocks in Java
  16. Disassembling Java Classes - Java Tutorials
  17. Double-checked locking,java tutorials,java tutorial
  18. Exceptional Constructors - Java Tutorials
  19. Final Methods - Java Tutorials
  20. garbage collection in java
  21. Java - JDK Tutorials
  22. J2EE Singleton Pattern - Design Pattern Tutorials
  23. Java Comments - Java Tutorials
  24. Java Field Initialisation - Java Tutorials
  25. Java HashSet  - Java Tutorials
  26. Java Multi Dimensions Array - Java Tutorials
  27. java awt package tutorial
  28. Java GC
  29. Java HashMap - Java Tutorials
  30. JDK 1.4 the NullPointerException - Java Tutorials
  31. HashMap and HashCode
  32. LinkedHashMap - Java Tutorials
  33. Which is Faster - LinkedList or ArrayList?
  34. Making Enumerations Iterable - JDK 5 Example
  35. Making Exceptions Unchecked - java tutorial,java tutorials
  36. Creation Time Comparison of Multi Dimensional Array- Java Tutorials
  37. Multicasting in Java - java tutorials,tutorial
  38. Non-virtual Methods in Java - java tutorials
  39. Orientating Components Right to Left,java newsletter,java,tutorial
  40. The link to the outer class,java tutorial,java tutorials