gpt4 book ai didi

java - Java中的GUI计算按钮编码错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:37 27 4
gpt4 key购买 nike

好吧,首先我正在做的项目有两个包,第一个是 murach.business,其中包含发票Calculations.java 第二个是 murach.forms,其中包含 InvoiceForm.java(JFrame) 和 SwingValidator.java

我需要为计算按钮的actionPerformed 事件添加一个事件处理程序。向此事件处理程序添加代码,从表单中获取客户类型和小计,使用 InvoiceCalculations 类中的calculateDiscountPct 方法根据这些值计算折扣百分比,计算折扣金额和总计,并在表单上设置值的格式和显示值。

该表单有 5 行,例如第一个客户类型、小计、折扣百分比、折扣金额和总计,下面是计算和退出按钮。

这是堆栈跟踪:

run:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "R"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
at java.lang.Double.parseDouble(Double.java:510)
at murach.forms.InvoiceForm.calculateButtonActionPerformed(InvoiceForm.java:183)
at murach.forms.InvoiceForm.access$300(InvoiceForm.java:15)
at murach.forms.InvoiceForm$4.actionPerformed(InvoiceForm.java:81)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6382)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3275)
at java.awt.Component.processEvent(Component.java:6147)
at java.awt.Container.processEvent(Container.java:2083)
at java.awt.Component.dispatchEventImpl(Component.java:4744)
at java.awt.Container.dispatchEventImpl(Container.java:2141)
at java.awt.Component.dispatchEvent(Component.java:4572)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4619)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4280)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4210)
at java.awt.Container.dispatchEventImpl(Container.java:2127)
at java.awt.Window.dispatchEventImpl(Window.java:2489)
at java.awt.Component.dispatchEvent(Component.java:4572)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:704)
at java.awt.EventQueue.access$400(EventQueue.java:82)
at java.awt.EventQueue$2.run(EventQueue.java:663)
at java.awt.EventQueue$2.run(EventQueue.java:661)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:677)
at java.awt.EventQueue$3.run(EventQueue.java:675)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:674)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
BUILD SUCCESSFUL (total time: 25 seconds)

到目前为止,当我点击代码的计算按钮时,我收到错误。这是我当前的代码,您能告诉我需要对代码进行哪些更改以及原因吗?

private void calculateButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                
// TODO add your handling code here:
double c = Double.parseDouble(customertypeTextField.getText());
double s = Double.parseDouble(subtotalTextField.getText());
pct d = Percent.parsepct(discountpercentTextField.getText());
double a = Double.parseDouble(discountamountTextField.getText());
double total = InvoicCalculations.calculateTotal(c, s, d);
NumberFormat currecny = NumberFormat.getCurrencyInstance();
totalTextField.setText(currency.format(total));
}

最佳答案

其中一个文本字段包含一个字母,导致 Double.parseDouble 由于无效而失败。来自 documentation :

Throws:

NullPointerException - if the string is null

NumberFormatException - if the string does not contain a parsable double.

为了防止这种情况,您可以:

  • 确保当您点击计算按钮时,字段仅包含有效数据。您可以使用 InputVerifier 来完成此操作.
  • 或在解析输入之前验证输入是否有效,如果无效,则显示弹出窗口或错误消息。

其他人也提到过,这里强调一下:do not use Double for representing money .

关于java - Java中的GUI计算按钮编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12605994/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com