问题描述
我正在创建每日保存日志。在创建时,我收到此 NumberFormatException 。我需要一些帮助来完成该项目。
这是我正在处理的代码。
package app;
import java.awt.EventQueue;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import java.awt.Font;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
import javax.swing.JSeparator;
import javax.swing.border.MatteBorder;
public class Application {
BufferedWriter log = null;
BufferedWriter bal = null;
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokelater(new Runnable() {
public void run() {
try {
Appilcation window = new Appilcation();
window.frame.setVisible(true);
} catch (Exception e) {
e.printstacktrace();
}
}
});
}
/**
* Create the application.
*/
public Appilcation() {
try {
initialize();
} catch (IOException e) {
// Todo Auto-generated catch block
e.printstacktrace();
}
}
/**
* Initialize the contents of the frame.
* @throws IOException
*/
@SuppressWarnings("resource")
private void initialize() throws IOException,NumberFormatException{
frame = new JFrame();
frame.setUndecorated(true);
frame.setBounds(100,100,450,420);
frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
log= new BufferedWriter(new FileWriter(new File("Log.txt")));//writer for log
bal= new BufferedWriter(new FileWriter(new File("bal.txt")));// " " bal
Scanner File = new Scanner(new File("bal.txt"));
//SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
// Date date = new Date();
JPanel panel = new JPanel();
panel.setBackground(new Color(255,102));
panel.setBounds(0,420);
frame.getContentPane().add(panel);
panel.setLayout(null);
JLabel lblDdmmyyyy = new JLabel("dd/mm/yyyy");
lblDdmmyyyy.setFont(new Font("ARCADE",Font.PLAIN,16));
lblDdmmyyyy.setHorizontalAlignment(SwingConstants.CENTER);
lblDdmmyyyy.setHorizontalTextPosition(SwingConstants.CENTER);
lblDdmmyyyy.setBounds(10,11,29);
panel.add(lblDdmmyyyy);
JLabel lblHh = new JLabel("hh:mm:ss");
lblHh.setFont(new Font("ARCADE",16));
lblHh.setHorizontalAlignment(SwingConstants.CENTER);
lblHh.setBounds(324,29);
panel.add(lblHh);
JButton btnAddSavings = new JButton("Add");
btnAddSavings.setBackground(new Color(255,255,0));
btnAddSavings.setFont(new Font("ARCADE",16));
btnAddSavings.addActionListener(new ActionListener() {
//something is not ryt here
public void actionPerformed(ActionEvent arg0) {
String Add=JOptionPane.showInputDialog(panel,"Enter Amount to be added");
String s=/*sdf.format(date)+**/" "+Add+"(Added)";
String Bal="";
while(File.hasNextLine())
Bal=File.nextLine();
int aa=Integer.parseInt(Bal);
int bb =Integer.parseInt(Add);
int sum=aa+bb;
try {
bal.write(sum+"\n");
log.write(s+"\n");
} catch (IOException e) {
// Todo Auto-generated catch block
e.printstacktrace();
}
}
});
btnAddSavings.setBounds(138,150,173,64);
panel.add(btnAddSavings);
JButton btnRemove = new JButton("Remove");
btnRemove.setBackground(new Color(255,127,80));
btnRemove.setFont(new Font("ARCADE",16));
btnRemove.setBounds(138,225,64);
panel.add(btnRemove);
JButton btnIdeas = new JButton("ideas");
btnIdeas.setBackground(new Color(153,204,255));
btnIdeas.setFont(new Font("ARCADE",16));
btnIdeas.setBounds(138,300,34);
panel.add(btnIdeas);
JButton btnExit = new JButton("Log");
btnExit.setBackground(new Color(204,255));
btnExit.setBounds(138,345,71,23);
panel.add(btnExit);
JButton btnExit_1 = new JButton("Exit");
btnExit_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});
btnExit_1.setBackground(new Color(204,255));
btnExit_1.setBounds(240,23);
panel.add(btnExit_1);
JLabel lblrs = new JLabel("0 Rs.");
lblrs.setBackground(new Color(0,0));
lblrs.setFont(new Font("Bebas",23));
lblrs.setHorizontalAlignment(SwingConstants.CENTER);
lblrs.setBounds(105,81,239,58);
panel.add(lblrs);
JPanel panel_1 = new JPanel();
panel_1.setBorder(new MatteBorder(2,2,(Color) new Color(0,0)));
panel_1.setBackground(new Color(0,0));
panel_1.setBounds(105,58);
panel.add(panel_1);
bal.close();
log.close();
}
}
和错误消息:
线程“ AWT-EventQueue-0”中的异常 java.lang.NumberFormatException:对于输入字符串:“”位于 java.base / java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) 在java.base / java.lang.Integer.parseInt(Integer.java:668)在 java.base / java.lang.Integer.parseInt(Integer.java:776)在 app.Appilcation $ 2.actionPerformed(Appilcation.java:113)在 java.desktop / javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967) 在 java.desktop / javax.swing.AbstractButton $ Handler.actionPerformed(AbstractButton.java:2308) 在 java.desktop / javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405) 在 java.desktop / javax.swing.DefaultButtonModel.setpressed(DefaultButtonModel.java:262) 在 java.desktop / javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) 在 java.desktop / java.awt.Component.processMouseEvent(Component.java:6632) 在 java.desktop / javax.swing.JComponent.processMouseEvent(JComponent.java:3342) 在java.desktop / java.awt.Component.processEvent(Component.java:6397) 在java.desktop / java.awt.Container.processEvent(Container.java:2263) 在 java.desktop / java.awt.Component.dispatchEventImpl(Component.java:5008) 在 java.desktop / java.awt.Container.dispatchEventImpl(Container.java:2321) 在java.desktop / java.awt.Component.dispatchEvent(Component.java:4840) 在 java.desktop / java.awt.Lightweightdispatcher.retargetMouseEvent(Container.java:4918) 在 java.desktop / java.awt.Lightweightdispatcher.processMouseEvent(Container.java:4547) 在 java.desktop / java.awt.Lightweightdispatcher.dispatchEvent(Container.java:4488) 在 java.desktop / java.awt.Container.dispatchEventImpl(Container.java:2307) 在java.desktop / java.awt.Window.dispatchEventImpl(Window.java:2762) 在java.desktop / java.awt.Component.dispatchEvent(Component.java:4840) 在 java.desktop / java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772) 在java.desktop / java.awt.EventQueue $ 4.run(EventQueue.java:721)在 java.desktop / java.awt.EventQueue $ 4.run(EventQueue.java:715)在 java.base / java.security.AccessController.doPrivileged(AccessController.java:389) 在 java.base / java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) 在 java.base / java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95) 在java.desktop / java.awt.EventQueue $ 5.run(EventQueue.java:745)在 java.desktop / java.awt.EventQueue $ 5.run(EventQueue.java:743)在 java.base / java.security.AccessController.doPrivileged(AccessController.java:389) 在 java.base / java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) 在 java.desktop / java.awt.EventQueue.dispatchEvent(EventQueue.java:742) 在 java.desktop / java.awt.EventdispatchThread.pumpOneEventForFilters(EventdispatchThread.java:203) 在 java.desktop / java.awt.EventdispatchThread.pumpEventsForFilter(EventdispatchThread.java:124) 在 java.desktop / java.awt.EventdispatchThread.pumpEventsForHierarchy(EventdispatchThread.java:113) 在 java.desktop / java.awt.EventdispatchThread.pumpEvents(EventdispatchThread.java:109) 在 java.desktop / java.awt.EventdispatchThread.pumpEvents(EventdispatchThread.java:101) 在 java.desktop / java.awt.EventdispatchThread.run(EventdispatchThread.java:90)
我尝试过的事情:
->确保所有文件都不为空。
这里没有什么帮助。
解决方法
问题似乎是一个文件中有一个空行。在解析Bal之前,请检查它是否为空。
,以下代码段中与未验证的输入有关的几个问题
-
从
-
JOptionPane
可以为空或不是数字 -
Bal
可能为空:实际上Bal
被分配了文件中的最后一行。因此,文件可能是非空的,但可能包含结尾的空行,因此Bal
是""
;
Add
返回的 String Add=JOptionPane.showInputDialog(panel,"Enter Amount to be added");
String s=/*sdf.format(date)+**/" "+Add+"(Added)";
String Bal="";
while(File.hasNextLine())
Bal=File.nextLine();
int aa=Integer.parseInt(Bal);
int bb =Integer.parseInt(Add);
int sum=aa+bb;
因此,您可能想实现一个单独的方法来解析数字,而不会失败:
private static int getNumber(String s) {
int res = 0;
try {
res = Integer.parseInt(s);
} catch (Exception ex) {
System.err.println("Failed to parse number from '" + s + "'," + ex.getMessage());
res = 0;
}
return res;
}
// ...
int aa = getNumber(Bal);
System.out.printf("DEBUG: Bal='%s' -> aa=%d%n",Bal,aa);
int bb = getNumber(Add);
System.out.printf("DEBUG: Add='%s' -> bb=%d%n",Add,bb);