简单的乘法程序GUI出错了。JAVA
因此,我试图制作一个简单的“区域查找”程序。它是基于文本的,但是当我添加一个GUI时,它会出错,我不知道是什么导致了它。对不起,如果我的拼写不正确,我不是最优秀的拼写者 代码简单的乘法程序GUI出错了。JAVA,java,user-interface,Java,User Interface,因此,我试图制作一个简单的“区域查找”程序。它是基于文本的,但是当我添加一个GUI时,它会出错,我不知道是什么导致了它。对不起,如果我的拼写不正确,我不是最优秀的拼写者 代码 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class AF implements ActionListener {
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class AF implements ActionListener {
double length;
double width;
double answer;
JTextField twidth = null;
JTextField tlength = null;
void AFWindow() {
JFrame AFwindow = new JFrame();
JPanel pan2 = new JPanel(new GridBagLayout());
AFwindow.setVisible(true);
AFwindow.setSize(250, 150);
AFwindow.setResizable(false);
GridBagConstraints c = new GridBagConstraints();
AFwindow.add(pan2);
pan2.setBackground(Color.LIGHT_GRAY);
c.gridx = 0;
c.gridy = 5;
JTextField tlength = new JTextField();
tlength.setText(" Length ");
pan2.add(tlength, c);
c.gridx = 0;
c.gridy = 0;
JTextField twidth = new JTextField();
twidth.setText(" Width ");
pan2.add(twidth, c);
JButton Find = new JButton("Ok");
c.gridx = 0;
c.gridy = -5;
pan2.add(Find);
Find.addActionListener(this);
Find.setActionCommand("ok");
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equalsIgnoreCase("ok")) {
try {
this.length = Double.parseDouble(tlength.getText());
this.width = Double.parseDouble(twidth.getText());
} catch (NumberFormatException ex) {
System.out.println("There was an issue!");
}
}
}
int area = (int) (length * width);
public void answer() {
JFrame answer = new JFrame();
answer.setVisible(true);
answer.setBackground(Color.yellow);
JPanel pan2 = new JPanel();
JLabel howanswer = new JLabel("Your answer is" + area
+ "We got this by multiplaying the length and width");
pan2.add(howanswer);
}
}
错误
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at AF.actionPerformed(AF.java:53)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
提前谢谢 当
tllength
为null
时,调用tllength.getText()
会得到一个NullPointerException
。使用twidth
也会遇到同样的问题
要解决此问题,请在启动操作之前实例化这些变量
具体来说,进行以下更改
JTextField tlength = new JTextField();
JTextField twidth = new JTextField();
// Update the lines above to the following.
this.tlength = new JTextField();
this.twidth = new JTextField();
Roddy很好地解释了为什么这些特定的更改是相关的。您得到了一个
NullPointerException
,因为当TLLength
为null
时,您正在调用TLLength.getText()
。使用twidth
也会遇到同样的问题
要解决此问题,请在启动操作之前实例化这些变量
具体来说,进行以下更改
JTextField tlength = new JTextField();
JTextField twidth = new JTextField();
// Update the lines above to the following.
this.tlength = new JTextField();
this.twidth = new JTextField();
Roddy很好地解释了为什么这些特定的变化是相关的。在你的课堂上,你有:
JTextField tlength = null;
JTextField twidth = null;
JTextField tlength = new JTextField();
tlength.setText(" Length ");
pan2.add(tlength, c);
...
JTextField twidth = new JTextField();
twidth.setText(" Width ");
pan2.add(twidth, c);
然后在构造函数中,您有:
JTextField tlength = null;
JTextField twidth = null;
JTextField tlength = new JTextField();
tlength.setText(" Length ");
pan2.add(tlength, c);
...
JTextField twidth = new JTextField();
twidth.setText(" Width ");
pan2.add(twidth, c);
您声明并添加到JPanel中的t长度
和t长度
仅为该构造函数范围内的局部变量。相反,actionPerformed
方法引用类的实例变量tlength
和twidth
,它们仍然为空,因为它们从未实例化。因此,当您尝试调用tllength.getText()
时,将抛出NullPointerException
要修复此问题,请更改行
jtextfieldtlength=newjtextfield()将构造函数中的code>设置为tllength=new JTextField()代码>。对JTextField twidth=…
行执行相同的操作。在您的类中,您有:
JTextField tlength = null;
JTextField twidth = null;
JTextField tlength = new JTextField();
tlength.setText(" Length ");
pan2.add(tlength, c);
...
JTextField twidth = new JTextField();
twidth.setText(" Width ");
pan2.add(twidth, c);
然后在构造函数中,您有:
JTextField tlength = null;
JTextField twidth = null;
JTextField tlength = new JTextField();
tlength.setText(" Length ");
pan2.add(tlength, c);
...
JTextField twidth = new JTextField();
twidth.setText(" Width ");
pan2.add(twidth, c);
您声明并添加到JPanel中的t长度
和t长度
仅为该构造函数范围内的局部变量。相反,actionPerformed
方法引用类的实例变量tlength
和twidth
,它们仍然为空,因为它们从未实例化。因此,当您尝试调用tllength.getText()
时,将抛出NullPointerException
要修复此问题,请更改行jtextfieldtlength=newjtextfield()将构造函数中的code>设置为tllength=new JTextField()代码>。对JTextField twidth=…
行执行同样的操作。请在您的问题中直接添加堆栈跟踪和代码的相关部分好吗?请在您的问题中直接添加堆栈跟踪和代码的相关部分好吧,您帮了我很多,如果不太多的话,为什么现在,答案没有弹出吗?@TimothyO'Connell我不知道,对不起。我对java.awt
几乎一无所知。你最好再发一个有更多信息的问题。好吧,你帮了我很多,如果不是太多的问题,为什么现在JFrame不会弹出答案?@TimothyO'Connell我不知道,对不起。我对java.awt
几乎一无所知。你最好再发布一个问题,提供更多信息。