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.If you are facing any programming issue, such as compilation errors or not able to find the code you are looking for.
Ask your questions, our development team will try to give answers to your questions.
Ask Questions? Discuss: Causing Deadlocks in Swing Code,java newsletter,java,tutorial
Post your Comment