-
Bug
-
Resolution: Fixed
-
P3
-
6
-
b49
-
generic, x86
-
generic, windows_2000
-
Verified
Run the provided test case. With 5.0 it will throw an exception and show a modal dialog with the message when it catches it in ThreadGroup.uncaughtExceptionHandler. With 6.0 this doesn't happen, exception is shown in the console instead.
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);
}
/**
* 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;
}
}
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) {
if (SwingUtilities.isEventDispatchThread()) {
System.out.println("AP in EventDispatchThread()");
System.out.println("Thread: " + Thread.currentThread());
System.out.println("TG: " + Thread.currentThread().getThreadGroup());
}
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) {
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();
}
}
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);
}
/**
* 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;
}
}
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) {
if (SwingUtilities.isEventDispatchThread()) {
System.out.println("AP in EventDispatchThread()");
System.out.println("Thread: " + Thread.currentThread());
System.out.println("TG: " + Thread.currentThread().getThreadGroup());
}
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) {
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();
}
}
- duplicates
-
JDK-6302855 (thread) ThreadGroup.uncaughtException behaves differently in Mustang
- Closed
-
JDK-6309009 REGRESSION: Uncaught Exeption Handling is no longer working
- Closed
- relates to
-
JDK-6727884 Some Uncaught Exceptions are no longer getting sent to the Uncaught Exception Handlers
- Closed