what causing of deadlocks in swing in java programming
you firstly assuming deadlocks .A deadlock is a that situation where two or more competing process or action waiting for a single resource and each waiting to let others to finish .and none of them uses that resources .it is a common problem in multithreading.
here a sample code given below the frame is being constructed by the static block and by adding the new Desktop Pain to the Content Pain it starts the Swing Thread.
But the Intraframe is also started with main Thread at the Same Time. The Swing Thread tries to call the paint Component method. Then it hangs by calling the static method.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package addtwoclass;
import java.awt.Graphics;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.SwingUtilities;
/**
*
* @author rajesh kumar shukla
*/
public class deadlocks extends JFrame {
private deadlocks() {
getContentPane().add(new DesktopPainClaz());
setSize(400, 200);
setTitle("DeadLock Example");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
new JInternalFrame("deadlocks");
}
// Static Block
static {
new deadlocks();
}
// 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) {
}
}
static {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new deadlocks();
}
});
}
here 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
set Visible(true) method just after the returning the new Intraframe (); But one thing you can do to change our static block. The code given below will fix above deadlock
problem.
0 comments:
Post a Comment