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

Catching Exceptions in GUI Code - Java Tutorials

Catching Exceptions in GUI Code - Java Tutorials

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

Catching uncaught exception in GUI

In this section, we will discuss how to catch uncaught exceptions in GUI.

Lets see the given below code to identify the uncaught exception :

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class Gui extends JFrame {
private static final int[] DAYS_PER_MONTH =
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
public Gui() {
super("GUI Example");
final JTextArea text = new JTextArea(14, 30);
getContentPane().add(new JScrollPane(text));
getContentPane().add(new JButton(new AbstractAction("Calculate") {
public void actionPerformed(ActionEvent e) {
text.setText("");
for (int i=0; i<=DAYS_PER_MONTH.length; i++) {
text.append("Month " + (i+1) + ": " +
DAYS_PER_MONTH[i] + "\n");
}
}
}), BorderLayout.NORTH);
}
public static void main(String[] args) {
Gui gui = new Gui();
gui.pack();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.show();
}
}

First we compile and run this code using javaw.exe as

javaw Gui

When you press the button, everything works ok except the button stay pressed.

When you run the same code using java.exe you will get the following exception displayed on the screen:

java.lang.ArrayIndexOutOfBoundsException: 12
at Gui$1.actionPerformed(Gui.java:16)
at javax.swing.AbstractButton.fireActionPerformed
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed
at javax.swing.DefaultButtonModel.fireActionPerformed
at javax.swing.DefaultButtonModel.setPressed
at javax.swing.plaf.basic.BasicButtonListener$ReleasedAction.actionPerformed
at javax.swing.SwingUtilities.notifyAction
at javax.swing.JComponent.processKeyBinding
at javax.swing.JComponent.processKeyBindings
at javax.swing.JComponent.processKeyEvent
at java.awt.Component.processEvent
at java.awt.Container.processEvent
at java.awt.Component.dispatchEventImpl
at java.awt.Container.dispatchEventImpl
at java.awt.Component.dispatchEvent
at java.awt.KeyboardFocusManager.redispatchEvent
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions
at java.awt.DefaultKeyboardFocusManager.dispatchEvent
at java.awt.Component.dispatchEventImpl
at java.awt.Container.dispatchEventImpl
at java.awt.Window.dispatchEventImpl
at java.awt.Component.dispatchEvent
at java.awt.EventQueue.dispatchEvent
at java.awt.EventDispatchThread.pumpOneEventForHierarchy
at java.awt.EventDispatchThread.pumpEventsForHierarchy
at java.awt.EventDispatchThread.pumpEvents
at java.awt.EventDispatchThread.pumpEvents
at java.awt.EventDispatchThread.run

After printing the above exceptions at console the java event dispatch thread dies after this.

Solution

The Solution of the above problem is ThreadGroup. A thread may corresponds to a Thread Group. The ThreadGroup has a function called as uncaughtException(Thread t, Throwable e) This method can be override and we call it whenever an uncaught exception occur. The event dispatch thread still dies, but at least it will let us know about it.

import javax.swing.*;
import java.awt.*;

public class ExceptionGroup extends ThreadGroup {
public ExceptionGroup() {
super("ExceptionGroup");
}
public void uncaughtException(Thread t, Throwable e) {
JOptionPane.showMessageDialog(findActiveFrame(),
e.toString(), "Exception Occurred", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}
/**
* I hate ownerless dialogs. With this method, we can find the
* currently visible frame and attach the dialog to that, instead
* of always attaching it to null.
*/
private Frame findActiveFrame() {
Frame[] frames = JFrame.getFrames();
for (int i = 0; i < frames.length; i++) {
Frame frame = frames[i];
if (frame.isVisible()) {
return frame;
}
}
return null;
}
}

All we now need to do is start the Gui from within a Thread that belongs to this ExceptionGroup, and we will catch all uncaught exceptions that are caused by the event dispatch thread:

import javax.swing.*;

public class BetterGui {
public static void main(String[] args) {
ThreadGroup exceptionThreadGroup = new ExceptionGroup();
new Thread(exceptionThreadGroup, "Init thread") {
public void run() {
Gui gui = new Gui();
gui.pack();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.show();
}
}.start();
}
}

Advertisements

Ads
Share on Google+Share on Google+

Catching Exceptions in GUI Code - Java Tutorials

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

Advertisements

 

Discuss: Catching Exceptions in GUI Code - Java Tutorials  

Post your Comment


Your Name (*) :
Your Email :
Subject (*):
Your Comment (*):
  Reload Image
 
 
Comments:1
baraa
March 26, 2012
java advance

prof

Ads

 

Ads