Java 单击ok按钮后,JDialog上不会返回任何值
我的扩展到JDialog的类在单击OK后不会返回值。谁能证明我做错了什么?我希望它返回一个双精度值 这是我的密码:Java 单击ok按钮后,JDialog上不会返回任何值,java,return,jdialog,Java,Return,Jdialog,我的扩展到JDialog的类在单击OK后不会返回值。谁能证明我做错了什么?我希望它返回一个双精度值 这是我的密码: import javax.swing.*; 导入javax.swing.border.*; 导入java.awt.*; 导入java.awt.BorderLayout; 导入java.awt.event.*; 公共类存储窗口扩展JDialog { 私人JButton jbtOk; 私人JButton jbtCancel; 私人JLabel jlbAccountNumber; 私有J
import javax.swing.*;
导入javax.swing.border.*;
导入java.awt.*;
导入java.awt.BorderLayout;
导入java.awt.event.*;
公共类存储窗口扩展JDialog
{
私人JButton jbtOk;
私人JButton jbtCancel;
私人JLabel jlbAccountNumber;
私有JTextField jtfAmount;
公共窗口(){
setModal(真);
//为按钮创建面板p1并设置GridLayout
//使用水平间隙5和垂直间隙10设置边框布局
setLayout(新边界布局(5,10));
JPanel p1=新的JPanel();
p1.撤销令(新标题边界(“行动”);
p1.设置布局(新的FlowLayout(FlowLayout.RIGHT,1,1));
jbtOk=新的JButton(“OK”);
jbtCancel=新的JButton(“取消”);
p1.添加(jbtOk);
p1.添加(jbtCancel);
添加(p1,BorderLayout.SOUTH);
JPanel p2=新JPanel(新网格布局(2,2));
p2.订单(新标题边界(“账户”));
p2.添加(新的JLabel(“账号”);
jlbAccountNumber=新的JLabel(“******-56”);
p2.添加(jlbAccountNumber);
p2.增加(新的JLabel(“金额”);
jtfAmount=新的JTextField(10);
p2.添加(jt);
//将内容添加到框架中
添加(p2,BorderLayout.CENTER);
jbtOk.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
setVisible(假);
}
});
}
公共双getAmount(){
返回Double.parseDouble(jtmafomount.getText());
}
/**主要方法*/
公共静态void main(字符串[]args){
存款窗口框架=新存款窗口();
frame.setTitle(“存款窗口”);
frame.pack();
frame.setLocationRelativeTo(null);//将帧居中
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
double amount=frame.getAmount();
}
}
当我运行主程序时,它会给我这些错误
错误:
线程“AWT-EventQueue-0”java.lang.NumberFormatException中的异常:空字符串
在sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1011)中
在java.lang.Double.parseDouble(Double.java:540)中
在DepostWindow.getAmount(DepostWindow.java:51)
在AccountWindow。(AccountWindow.java:48)
登录(LoginWindow.java:67)
在LoginWindow.access$000(LoginWindow.java:16)
在LoginWindow$1.actionPerformed(LoginWindow.java:55)
在javax.swing.AbstractButton.fireActionPerformed上(AbstractButton.java:2018)
位于javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
在javax.swing.DefaultButtonModel.fireActionPerformed上(DefaultButtonModel.java:402)
在javax.swing.DefaultButtonModel.setPressed中(DefaultButtonModel.java:259)
在javax.swing.plaf.basic.BasicButtonListener.MouseRelease(BasicButtonListener.java:252)
位于java.awt.Component.ProcessMouseeEvent(Component.java:6505)
位于javax.swing.JComponent.ProcessMouseeEvent(JComponent.java:3320)
位于java.awt.Component.processEvent(Component.java:6270)
位于java.awt.Container.processEvent(Container.java:2229)
位于java.awt.Component.dispatchEventImpl(Component.java:4861)
位于java.awt.Container.dispatchEventImpl(Container.java:2287)
位于java.awt.Component.dispatchEvent(Component.java:4687)
位于java.awt.LightweightDispatcher.RetargetMouseeEvent(Container.java:4832)
位于java.awt.LightweightDispatcher.ProcessMouseeEvent(Container.java:4492)
位于java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
位于java.awt.Container.dispatchEventImpl(Container.java:2273)
位于java.awt.Window.dispatchEventImpl(Window.java:2719)
位于java.awt.Component.dispatchEvent(Component.java:4687)
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
在java.awt.EventQueue.access$200(EventQueue.java:103)
位于java.awt.EventQueue$3.run(EventQueue.java:694)
在java.awt.EventQueue$3.run(EventQueue.java:692)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
在java.awt.EventQueue$4.run(EventQueue.java:708)
在java.awt.EventQueue$4.run(EventQueue.java:706)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
在java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:161)
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:150)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
您的堆栈跟踪说明了一切-当您尝试将字符串解析为double-
double.parseDouble(jtfomount.getText())
时,您会遇到一个NumberFormatException
说:
抛出:NullPointerException-如果字符串为null
NumberFormatException-如果字符串不包含可解析双精度 因此,请使用
try/catch
块来处理此类情况
此外,如果您不想等到对话框关闭后再查看输入值是否正常,则可以在对话框中进行某种验证。实际问题不在于数字格式,而在于关闭操作,请替换
DefaultCloseOperation
s
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);