Java HSSFCell读取空错误?

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)

我一直在尝试为一个志愿者项目编写一个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)
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 "";
}