我有一个表单,其中包含Fname
和Lname
以及Date
以及将此信息写入文件的方法。
如果Fname
或Lname
包含数字,程序应显示错误消息,而不是运行以下所有语句(如写入文件并生成随机数和......),而不是退出。
因为我不知道怎么做这样,在我的代码中我写的如果Fname或Lname有数字,退出!
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try{
setFName(jTextField1.getText());
if(havedigit(getFName())==true) {
System.exit(1);
}
setLName(jTextField2.getText());
if(havedigit(lastName)==true) {
System.exit(1);
}
WriteToFile(getFName());
WriteToFile(getLName());
setDate(Integer.parseInt(jTextField3.getText()));
WriteToFile(String.valueOf(getDate()));
Random rnd1=new Random();
Registration_Number=rnd1.nextInt(100);
setRegNum(Registration_Number);
WriteToFile(String.valueOf(getRegNum()));
jLabel6.setText(String.valueOf(getRegNum()));
}
catch(Exception e){
jLabel6.setText("Error!");
}
}
public boolean havedigit(String in){
for(int i=0;i<in.length();i++){
if(Character.isDigit(in.charAt(i))) return true;
}
return false;
}
请帮忙!
答案 0 :(得分:2)
这就是您需要已检查例外的原因。只需抛出SomeException
而不是System.exit(1)
并在块中正确处理它:
catch (SomeException e){
jLabel6.setText("Error!");
}
不要认为捕捉所有异常都是个好主意。
答案 1 :(得分:1)
作为一般规则,请尽量避免在GUI驱动的应用程序中使用System.exit()
。它只是让整个程序退出,让用户想知道发生了什么。 System.exit()
通常更适合希望为shell提供退出代码的命令行应用程序,它与大多数操作系统中可用的system exit调用并行。
试试这个:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try{
setFName(jTextField1.getText());
if(havedigit(getFName())) {
jLabel6.setText("First name error!");
return;
}
setLName(jTextField2.getText());
if(havedigit(lastName)) {
jLabel6.setText("Last name error!");
return;
}
WriteToFile(getFName());
WriteToFile(getLName());
setDate(Integer.parseInt(jTextField3.getText()));
WriteToFile(String.valueOf(getDate()));
Random rnd1=new Random();
Registration_Number=rnd1.nextInt(100);
setRegNum(Registration_Number);
WriteToFile(String.valueOf(getRegNum()));
jLabel6.setText(String.valueOf(getRegNum()));
}
catch(Exception e){
jLabel6.setText("Error!");
}
}
答案 2 :(得分:1)
这是你可以做到的一种方式:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try{
setFName(jTextField1.getText());
setLName(jTextField2.getText());
boolean firstNameHasDigit = havedigit(getFName());
boolean lastNameHasDigit = havedigit(getLName());
if (firstNameHasDigit || lastNameHasDigit) {
jLabel6.setText("Names cannot contain digits");
}
else {
WriteToFile(getFName());
WriteToFile(getLName());
setDate(Integer.parseInt(jTextField3.getText()));
WriteToFile(String.valueOf(getDate()));
Random rnd1=new Random();
Registration_Number=rnd1.nextInt(100);
setRegNum(Registration_Number);
WriteToFile(String.valueOf(getRegNum()));
jLabel6.setText(String.valueOf(getRegNum()));
}
}
catch(Exception e){
jLabel6.setText("Error!");
}
}
public boolean havedigit(String in){
for(int i=0;i<in.length();i++){
if(Character.isDigit(in.charAt(i))) return true;
}
return false;
}
答案 3 :(得分:0)
if(havedigit(getFName())==true) {
System.exit(1);
}
setLName(jTextField2.getText());
if(havedigit(lastName)==true) {
System.exit(1);
}
应该是
if(havedigit(getFName())) {
JOptionPane.showMessageDialog(.....);
return; //get out of method, no need to continue
}
setLName(jTextField2.getText());
if(havedigit(lastName)) {
JOptionPane.showMessageDialog(.....);
return; //get out of method, no need to continue
}
在Google上搜索有关如何使用JOptionPane.showMessageDialog。
的信息答案 4 :(得分:-1)
在if语句中,而不是
System.exit(1);
你应该有东西
throw new MyException("Error Text");
然后你的捕获应该是这样的:
catch(MyException e){
jLabel6.setText(e.getMessage());
}
MyException扩展了Exception。