异常不起作用(不显示JOptionPane消息)

时间:2016-08-07 20:42:02

标签: java swing exception exception-handling joptionpane

我有一个从jtextfield获取数据的字符串,然后我将这个数据子串到三个字符串中的3个字母(String first,second,third)

try {
String text,first,second,third,result;
Swing get = new Swing();
text = get.getMyText();
first = text.substring(0,1);
second = text.substring(1,2);
third = text.substring(2,3);
result = first + third + second;
if(text.isEmpty) {
throw new Exception();
    }
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Empty","....",JOptionPane.ERROR_MESSAGE);
    }

我从系统中收到这条奇怪的消息而不是JOptionPane消息:

Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 1

我在这里想念的任何线索?

为了您的信息,我也尝试过以下,同样的错误

if(first.isEmpty() || second.isEmpty() || third.isEmpty()) {
       // my message
    }

我的Swing课程如下:

public class Swing {

    // second line of the frame

    private static JFrame window; // creating the frame
    private static JTextField text; 
    // setting the frame
    /**
     * @wbp.parser.entryPoint
     */
    public void Run() {

        window = new JFrame("Tool");
        window.setResizable(false);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().setBackground(new Color(230, 230, 250));
        window.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        window.getContentPane().isOpaque();

        window.getContentPane().setLayout(null);

        // the textfield
        text = new JTextField();
        text.setHorizontalAlignment(SwingConstants.CENTER);
        text.setForeground(Color.BLUE);
        text.setFont(new Font("David", Font.PLAIN, 20));
        text.setColumns(10);
        text.setBounds(504, 11, 149, 20);
        window.getContentPane().add(text);

        // adding the button from the other class (MyBtn)
        MyBtn addBTN = new MyBtn();
        window.getContentPane().add(addBTN.run());

        // setting the frame
        window.setVisible(true);
        window.setSize(750, 500);
        window.setLocationRelativeTo(null); 
    }

    // preparing the getters for the input
    public String getText() {
        return text.getText();
    }

1 个答案:

答案 0 :(得分:1)

你需要测试文本是否为空之前试图从中提取subStrings,因为我的赌注是你可能尝试从空字符串中获取子字符串,因此你看到了运行时异常。

我敢打赌,你的Swing类是一个GUI,可能是一个JFrame,你正在创建一个未显示的Swing对象并尝试从中提取文本,因为它没有显示,所以用户未在文本字段中输入任何数据。也许您希望从完全独立且唯一的显示Swing对象中提取文本。但同样,这只是猜测。如果我是对的,那么您希望在这里需要传递对可视化GUI组件的引用,而不是不必要地创建一个新组件。

哪个班级是catch (exception e) {?你的意思是大写异常吗?

类似的东西:

// get should be set with a valid reference to the displayed
// Swing object. Don't create a **new** Swing object
// Swing get = new Swing();  // no!

String text = get.getMyText().trim();

if (text.isEmpty() || text.length() < 4) {
    // show error message in JOptionPane
} else {
    String text,first,second,third,result;
    first = text.substring(0,1);
    second = text.substring(1,2);
    third = text.substring(2,3);
    result = first + third + second;
}