我有一个从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();
}
答案 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;
}