177 lines
4.5 KiB
Java
177 lines
4.5 KiB
Java
package except;
|
|
|
|
import java.awt.EventQueue;
|
|
import java.awt.event.*;
|
|
import java.io.*;
|
|
import java.nio.file.*;
|
|
import java.util.*;
|
|
import javax.swing.*;
|
|
|
|
/**
|
|
* @version 1.33 2007-06-12
|
|
* @author Cay Horstmann
|
|
*/
|
|
public class ExceptTest
|
|
{
|
|
public static void main(String[] args)
|
|
{
|
|
EventQueue.invokeLater(new Runnable()
|
|
{
|
|
public void run()
|
|
{
|
|
JFrame frame = new ExceptTestFrame();
|
|
frame.setTitle("ExceptTest");
|
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
frame.setVisible(true);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* A frame with a panel for testing various exceptions
|
|
*/
|
|
class ExceptTestFrame extends JFrame
|
|
{
|
|
public ExceptTestFrame()
|
|
{
|
|
ExceptTestPanel panel = new ExceptTestPanel();
|
|
add(panel);
|
|
pack();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* A panel with radio buttons for running code snippets and studying their exception behavior
|
|
*/
|
|
class ExceptTestPanel extends Box
|
|
{
|
|
private ButtonGroup group;
|
|
private JTextField textField;
|
|
private double[] a = new double[10];
|
|
|
|
public ExceptTestPanel()
|
|
{
|
|
super(BoxLayout.Y_AXIS);
|
|
group = new ButtonGroup();
|
|
|
|
// add radio buttons for code snippets
|
|
|
|
addRadioButton("Integer divide by zero", new ActionListener()
|
|
{
|
|
public void actionPerformed(ActionEvent event)
|
|
{
|
|
a[1] = 1 / (a.length - a.length);
|
|
}
|
|
});
|
|
|
|
addRadioButton("Floating point divide by zero", new ActionListener()
|
|
{
|
|
public void actionPerformed(ActionEvent event)
|
|
{
|
|
a[1] = a[2] / (a[3] - a[3]);
|
|
}
|
|
});
|
|
|
|
addRadioButton("Array bounds", new ActionListener()
|
|
{
|
|
public void actionPerformed(ActionEvent event)
|
|
{
|
|
a[1] = a[10];
|
|
}
|
|
});
|
|
|
|
addRadioButton("Bad cast", new ActionListener()
|
|
{
|
|
public void actionPerformed(ActionEvent event)
|
|
{
|
|
a = (double[]) event.getSource();
|
|
}
|
|
});
|
|
|
|
addRadioButton("Null pointer", new ActionListener()
|
|
{
|
|
public void actionPerformed(ActionEvent event)
|
|
{
|
|
System.out.println(textField.getAction().toString());
|
|
}
|
|
});
|
|
|
|
addRadioButton("sqrt(-1)", new ActionListener()
|
|
{
|
|
public void actionPerformed(ActionEvent event)
|
|
{
|
|
a[1] = Math.sqrt(-1);
|
|
}
|
|
});
|
|
|
|
addRadioButton("Overflow", new ActionListener()
|
|
{
|
|
public void actionPerformed(ActionEvent event)
|
|
{
|
|
a[1] = 1000 * 1000 * 1000 * 1000;
|
|
int n = (int) a[1];
|
|
System.out.println(n);
|
|
}
|
|
});
|
|
|
|
addRadioButton("No such file", new ActionListener()
|
|
{
|
|
public void actionPerformed(ActionEvent event)
|
|
{
|
|
try
|
|
{
|
|
System.out.println(new Scanner(Paths.get("woozle.txt")).next());
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
textField.setText(e.toString());
|
|
}
|
|
}
|
|
});
|
|
|
|
addRadioButton("Throw unknown", new ActionListener()
|
|
{
|
|
public void actionPerformed(ActionEvent event)
|
|
{
|
|
throw new UnknownError();
|
|
}
|
|
});
|
|
|
|
// add the text field for exception display
|
|
textField = new JTextField(30);
|
|
add(textField);
|
|
}
|
|
|
|
/**
|
|
* Adds a radio button with a given listener to the panel. Traps any exceptions in the
|
|
* actionPerformed method of the listener.
|
|
* @param s the label of the radio button
|
|
* @param listener the action listener for the radio button
|
|
*/
|
|
private void addRadioButton(String s, ActionListener listener)
|
|
{
|
|
JRadioButton button = new JRadioButton(s, false)
|
|
{
|
|
// the button calls this method to fire an
|
|
// action event. We override it to trap exceptions
|
|
protected void fireActionPerformed(ActionEvent event)
|
|
{
|
|
try
|
|
{
|
|
textField.setText("No exception");
|
|
super.fireActionPerformed(event);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
textField.setText(e.toString());
|
|
}
|
|
}
|
|
};
|
|
|
|
button.addActionListener(listener);
|
|
add(button);
|
|
group.add(button);
|
|
}
|
|
}
|