当在JTextField中输入字符串而不是整数时,如何创建Java异常?
如果在JTextField而不是od integer中写入字符串,我会遇到异常问题。我想对输入的数字求和,并在每次单击按钮时将结果写入JButton。每次单击按钮时,我都会看到错误: * * 和其他类-侦听器:当在JTextField中输入字符串而不是整数时,如何创建Java异常?,java,windows,jtextfield,Java,Windows,Jtextfield,如果在JTextField而不是od integer中写入字符串,我会遇到异常问题。我想对输入的数字求和,并在每次单击按钮时将结果写入JButton。每次单击按钮时,我都会看到错误: * * 和其他类-侦听器: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; public class EnaP implements ActionListen
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class EnaP implements ActionListener{
public void actionPerformed(ActionEvent e) {
JButton gumb = (JButton) e.getSource();
try{
String a = Ena.a.getSelectedText().toString();
String b = Ena.b.getSelectedText().toString();
int x = Integer.parseInt(a);
int y = Integer.parseInt(b);
int sum = x+y;
gumb.setText(""+sum);
}
catch (NumberFormatException n) {
System.out.println("Please enter a number.");
}
}
}
我不知道如何修复它 您必须首先检查null,,然后抛出自己的异常,例如 目前,您的代码是:
String a = Ena.a.getSelectedText().toString();
事实上,您已经尝试对getSelectedText()
的结果调用toString()
你想要:
String fieldAsString = Ena.a.getSelectedText();
if (fieldAsString != null) {
try {
int x = Integer.parseInt(fieldAsString);
...
相反
请注意:getSelectedText()
已返回一个字符串。对该字符串对象调用toString()
没有任何意义
最后:避免使用那些无意义的变量名。使用名称,说明名称后面的内容 你应该在什么时候打电话。getSelectedText()
的文档说明:
返回此TextComponent
中包含的选定文本。如果选择为null
或文档为空,则返回null
仅当用户在JTextField
中选择了全部或部分文本时,才会返回文本。要仅获取在JTextField
中键入的内容,请使用getText()
您的代码还有一些其他问题。不应将文本字段设置为公共静态,因为这样做本质上是创建全局变量。在这么短的程序中,它不会给您带来麻烦,但随着程序的增长,您会很快遇到麻烦
相反,将它们设置为私有,为它们提供getter,实例化Ena
的实例,并将其传递到EnaP
的构造函数中,然后调用getter来访问它们。这样,只有创建为Ena
实例中按钮的操作侦听器的EnaP
实例才能访问文本字段
此外,正如GhostCat指出的那样,变量名不会传递任何关于它们表示什么或它们将包含什么值的信息。同样,这在一个非常小的程序中并不重要,但随着程序变得越来越大,它变得越来越重要。GhostCat告诉您的一切都是正确的
另一个问题是:Ena.a.getSelectedText()
从输入字段返回所选(=突出显示)文本。我肯定那不是你想要的
从javadoc:
公共字符串getSelectedText()
返回中包含的选定文本
此文本组件。
如果选择为空或文档为空,
返回null
返回:文本
抛出:IllegalArgumentException-如果
某些情况下,所选内容与文档的映射无效
理由
改用Ena.a.getText()
可能的副本,您应该像这样使用instanceof
:if(e.getSource()instanceof JButton)
,然后再强制转换它,否则抛出异常
String a = Ena.a.getSelectedText().toString();
String fieldAsString = Ena.a.getSelectedText();
if (fieldAsString != null) {
try {
int x = Integer.parseInt(fieldAsString);
...