Java HSSFCell读取空错误?
我一直在尝试为一个志愿者项目编写一个Excel到JSON的转换器,但我一直遇到无法解释的错误,拒绝更正。这是我的错误:Java HSSFCell读取空错误?,java,json,excel,apache-poi,Java,Json,Excel,Apache Poi,我一直在尝试为一个志愿者项目编写一个Excel到JSON的转换器,但我一直遇到无法解释的错误,拒绝更正。这是我的错误: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at bin.parse.MembersParser.tryString(MembersParser.java:112) at bin.parse.MembersParser.parseFile(MembersParser.java:53)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at bin.parse.MembersParser.tryString(MembersParser.java:112)
at bin.parse.MembersParser.parseFile(MembersParser.java:53)
at bin.ParserFrame.actionPerformed(ParserFrame.java:61)
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$500(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$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.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$JavaSecurityAccessImpl.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)
我不能让它消失,不管我做了多少改变,所以这是来源,也许其他人可以告诉我我做错了什么
bin.Main:
package bin;
import javax.swing.JFrame;
public class Main {
static ParserFrame f;
public static void main(String[] args) {
f = new ParserFrame();
f.add(f.panel);
f.setSize(800, 200);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
bin.ParserFrame:
package bin;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import javax.swing.*;
import bin.parse.*;
@SuppressWarnings("serial")
public class ParserFrame extends JFrame implements ActionListener {
private JButton parse;
private JLabel desc, inpt, oupt;
private JTextField input, output;
final JComboBox<String> menu;
final int FIELDS_WIDTHS = 35;
String[] CHOICES = {"Members", "MembersDues", "MembersLevel", "MembersAddresses", "MembersContact"};
private Parser p;
public JPanel panel = new JPanel();
public ParserFrame() {
desc = new JLabel("Select type of format to parse: ");
menu = new JComboBox<String>(CHOICES);
menu.setVisible(true);
inpt = new JLabel("Select input source .xls file: ");
input = new JTextField(FIELDS_WIDTHS);
oupt = new JLabel("Select output location (end with .txt extension): ");
output = new JTextField(FIELDS_WIDTHS);
parse = new JButton("Parse the file.");
parse.addActionListener(this);
panel.setLayout(new GridLayout(4, 2));
panel.add(desc);
panel.add(menu);
panel.add(inpt);
panel.add(input);
panel.add(oupt);
panel.add(output);
panel.add(parse);
}
private void createButton() {
parse = new JButton("Parse File");
parse.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
p = selectParser((String) menu.getSelectedItem());
String outputJSON = p.parseFile(input.getText());
try(PrintWriter out = new PrintWriter(output.getText())){
out.println(outputJSON);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
}
private Parser selectParser(String selection) {
switch (selection) {
case "Members": return new MembersParser();
}
return null;
}
}
您确实暗示您的所有行都已填充(从0到15);但在某些情况下,情况似乎并非如此 null指针出现在
trysting()
中,因此我假设c在某些情况下为null
如果你加上
if(c == null) {
return "";
}
在幽会开始时(与其他tryXXX方法类似),这应该是可以的。您确实暗示您的所有行都已填充(从0到15);但在某些情况下,情况似乎并非如此 null指针出现在
trysting()
中,因此我假设c在某些情况下为null
如果你加上
if(c == null) {
return "";
}
在开始幽会时(和其他tryXXX方法类似),这应该是可以的
if(c == null) {
return "";
}