单击按钮后需要读取两个JTextfields的输入
我正在开发一个程序来启动一个applet,它将演示Extended-Euclid算法的执行方式。 我有两个JTextFields,这些值将被输入并需要被读取/转换为整数等。我实际上在读取输入值时遇到了麻烦。
更新的问题:
我在阅读完第一个答案后对代码进行了更改。 我没有使用DocumentListener,而是按照建议在actionPerformed方法中执行所有操作,但是当我尝试测试时,我仍然遇到错误。
这是我当前的动作执行:
public void actionPerformed(ActionEvent event) { System.out.println(event.getActionCommand()); String quotient = ""; nText = nField.getText(); mText = mField.getText(); if("Find GCD".equals(event.getActionCommand())){ int nInt = Integer.parseInt(nText); int mInt = Integer.parseInt(mText); int q = mInt/nInt; quotient = (Integer.toString(q)); } else quotient = "n/a"; //NOT the gcd, just to see if this will display gcd.setText(quotient); gcd.setEditable(false); }
(注意:gcd是另一个JTextField,但只需要显示结果)
现在点击我的按钮后,我在控制台中打印出这些错误:
EuclidApplet.actionPerformed(EuclidApplet.java:87)中的线程“AWT-EventQueue-1”java.lang.NullPointerException中的exception,位于javax.swing.AbstractButton上的javax.swing.AbstractButton.fireActionPerformed(未知来源)$ Handler.actionPerformed(未知来自java.awt.Component.processMouseEvent的javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知来源)javax.swing.DefaultButtonModel.setPressed(未知来源)的javax.swing.DefaultButtonModel.fireActionPerformed(未知来源) (未知来源)位于java.awt.Component上的java.awt.Component.processEvent(未知来源)中的javax.swing.JComponent.processMouseEvent(未知来源)java.awt.Component.dispatchEventImpl上的java.awtainer.processEvent(未知来源)(未知来源) java.awt.LightweightDispatcher.processMouseEvent(未知来源)的java.awt.LightweightDispatcher.retargetMouseEvent(未知来源)java.awt.Component.dispatchEvent(未知来源)java.awt.Container.dispatchEventImpl(未知来源)的来源)在java.awt.Li ghtweightDispatcher.dispatchEvent(未知来源),位于java.awt.Et上的java.awt.Window.dispatchEventImpl(未知来源)java.awt.Component.dispatchEvent(未知来源)java.awt.EventQueue上的java.awt.Component.dispatchEvent(未知来源)。 java.security.AccessController上的java.awt.EventQueue $ 1.run(未知来源)java.awt.EventQueue.access $ 000(未知来源)上的dispatchEventImpl(未知来源)$ 1.run(未知来源) java.security.AccessControlContext上的.doPrivileged(Native Method)$ java.security.AccessControlContext $ 1.doIntersectionPrivilege(未知来源)java.awt上的java.awt.EventQueue $ 2.run(未知来源)$ 1.doIntersectionPrivilege(未知来源)。 java.security.AccessControlContext上java.security.AccessController.doPrivileged(Native Method)的EventQueue $ 2.run(未知源)java.awt上java.awt.EventQueue.dispatchEvent(未知来源)的$ 1.doIntersectionPrivilege(未知来源)。 java.awt.Ev上的EventDispatchThread.pumpOneEventForFilters(未知来源) java.awt.EventDispatchThread上java.awt.EventDispatchThread.pumpEvents(未知来源)的java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源)中的entDispatchThread.pumpEventsForFilter(未知来源)。运行(未知来源)
我在我设置的行中得到NullPointerException
nText = nField.getText();
但我仍然不确定为什么我无法获取已插入JTextField的文本。 我发现的每个例子都表明这应该有效,但我无法理解。 谢谢。
我在设置nText = nField.getText()的行中得到NullPointerException;
这可能是因为您将nField定义为类变量和局部变量。 问题是您正在尝试引用null变量的类变量。
解决方案是摆脱类变量。
解决方案:不要使用DocumentListener,因为这不仅是矫枉过正,而是错误的。 如果你想按下按钮的值,那么在按钮的动作中获取值,而不是从DocumentListener获取。 如果你从按钮的动作监听器中获取值不起作用,那么让我们弄清楚你做错了什么并帮助你解决这个错误。
事实上,我看到你试图这样做一次,但评论出来:
System.out.println(event.getActionCommand()); System.out.println(event.getID()); String quotient = ""; //nText = nField.getText(); // **** here **** //mText = mField.getText(); // **** and here ****
因此取消注释这些行并删除DocumentListener。
我在下面看到的一个问题是你正在尝试使用==运算符检查字符串是否等效:
if("Find GCD" == event.getActionCommand()){ int nInt = Integer.parseInt(nText); int mInt = Integer.parseInt(mText); int q = mInt/nInt; quotient = (Integer.toString(q)); }
不要这样做,因为这有时会起作用而在其他时候会失败。 你真的不在乎两个字符串是否是同一个对象 (这是==运算符测试的对象),而是你想知道它们是否包含相同的字符串数据。 为此,您应该使用equals或equalsIgnoreCase方法:
if ("Find GCD".equals(event.getActionCommand())) { int nInt = Integer.parseInt(nText); int mInt = Integer.parseInt(mText); int q = mInt/nInt; quotient = (Integer.toString(q)); }
- 具有自签名证书的Java SSL连接,无需将完整密钥库复制到客户端
- org.apache.commons.net.ftp.FTPClient listFiles()的问题
- JavaFX 2D文本与3D场景中的背景
- 通过Collections.synchronizedSet(…)。forEach()的迭代是否保证是线程安全的?
- java.net.Inet6Address.getByName字面上输出并查看地址是否存在
- 用Gson解析JSON地图/词典?
- SimpleCaptcha和wav播放
- 使用Spring-Data Elasticsearch在Elasticsearch中动态创建索引名称
- 使用自签名证书和SSLEngine(JSSE)的SSL握手