Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当在JTextField中输入字符串而不是整数时,如何创建Java异常?_Java_Windows_Jtextfield - Fatal编程技术网

当在JTextField中输入字符串而不是整数时,如何创建Java异常?

当在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

如果在JTextField而不是od integer中写入字符串,我会遇到异常问题。我想对输入的数字求和,并在每次单击按钮时将结果写入JButton。每次单击按钮时,我都会看到错误: *

*

和其他类-侦听器:

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);
  ...