Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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
Java 单击ok按钮后,JDialog上不会返回任何值_Java_Return_Jdialog - Fatal编程技术网

Java 单击ok按钮后,JDialog上不会返回任何值

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

我的扩展到JDialog的类在单击OK后不会返回值。谁能证明我做错了什么?我希望它返回一个双精度值

这是我的密码:

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