运行JAR的JAVA Null指针异常

时间:2015-10-31 20:41:36

标签: java

我正在尝试在另一台机器上运行我的jar文件(而不是在开发机器上)。运行它会给我一个null异常,而在dev机器上运行会按预期运行。真的不明白为什么。这是我得到例外的一行:

currentSapt = Integer.parseInt(saptamanaCombo.getSelectedItem()。toString());

'currentSapt'为int,'saptamnaCombo'为组合框。任何帮助将非常感激。 enter image description here

public class VizualizareScreen extends JPanel{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Connection connection;
    private JTable table;
    private DefaultTableModel model;
    private JScrollPane tableScroll;
    private GridBagConstraints c;
    private JLabel saptamanaLabel2;
    private JLabel mancareLabel2;
    private JLabel scoalaLabel2;
    private JComboBox<Integer> saptamanaCombo;
    private Font font;
    private Font totalFont;
    private Integer[] saptamani;
    private int currentSapt;
    private int totalMancare;
    private int totalScoala;
    private JButton modifica;
    private JButton sterge;
    private JLabel numeLabel;
    private JLabel prenumeLabel;
    private JLabel mancareLabel;
    private JLabel scoalaLabel;
    private JLabel dataLabel;
    private JLabel saptamanaLabel;
    private JTextField numeField;
    private JTextField prenumeField;
    private JComboBox<String> mancareCombo;
    private JComboBox<String> scoalaCombo;
    private JTextField dataField;
    private JTextField saptamanaField;
    private String modifiedNume;
    private String modifiedPrenume;
    private String modifiedData;
    private Font fieldsFont;
    private Font buttonFont;
    private int deleteId;
    public JComboBox<Integer> getSaptamanaCombo() {
        return saptamanaCombo;
    }
    public VizualizareScreen(Connection conn) {
        setLayout(new GridBagLayout());
        initComponents(conn);
        populate(Integer.parseInt(saptamanaCombo.getSelectedItem().toString()));
        mancareLabel2.setText(mancareLabel2.getText() + totalMancare);
        scoalaLabel2.setText(scoalaLabel2.getText() + totalScoala);
        addComponents();    
    }
    public void initComponents(Connection conn){
        connection = conn;
        modifiedNume = "";
        modifiedPrenume = "";
        modifiedData = "";
        int sapt = getSaptamani(), saptCount = 0;;
        saptamani = new Integer[sapt];
        for(int i = 1; i <= sapt; i++)
            saptamani[saptCount++] = i;
        font = new Font("Times New Roman",Font.PLAIN,20);
        totalFont = new Font("Times New Roman",Font.BOLD,32);
        c = new GridBagConstraints();
        String[] items = {"DA","NU"};
        mancareLabel2 = new JLabel("Mancare: ");
        mancareLabel2.setFont(totalFont);
        scoalaLabel2 = new JLabel("Scoala: ");
        scoalaLabel2.setFont(totalFont);
        saptamanaLabel2 = new JLabel("Saptamana: ");
        saptamanaLabel2.setFont(font);
        saptamanaCombo = new JComboBox<Integer>(saptamani);
        saptamanaCombo.setSelectedIndex(saptamanaCombo.getItemCount()-1);
        saptamanaCombo.setFont(font);   
        fieldsFont = new Font("Times New Roman",Font.PLAIN,20);
        numeField = new JTextField(20);
        numeField.setFont(fieldsFont);
        prenumeField = new JTextField(20);
        prenumeField.setFont(fieldsFont);
        mancareCombo = new JComboBox<String>(items);
        mancareCombo.setFont(fieldsFont);
        scoalaCombo = new JComboBox<String>(items);
        scoalaCombo.setFont(fieldsFont);
        saptamanaField = new JTextField(20);
        saptamanaField.setFont(fieldsFont);
        SimpleDateFormat ft = new SimpleDateFormat("dd/M/yyyy");
        String currentDate = ft.format(new Date());
        dataField = new JTextField(20);
        dataField.setFont(fieldsFont);
        dataField.setText(currentDate);
        buttonFont = new Font("Times New Roman",Font.PLAIN,50);
        currentSapt = Integer.parseInt(saptamanaCombo.getSelectedItem().toString());

1 个答案:

答案 0 :(得分:0)

正如@ f1sh指出的那样 - 这个错误最有可能发生在getSaptamani()返回0

你仍然可以通过修改你的逻辑来解决这个问题(不要说它会比那条线运行得多......)

目前,您选择currentSapt的代码如下所示:

int sapt = getSaptamani(), saptCount = 0;;
saptamani = new Integer[sapt];
for(int i = 1; i <= sapt; i++)
        saptamani[saptCount++] = i;
saptamanaCombo = new JComboBox<Integer>(saptamani);
saptamanaCombo.setSelectedIndex(saptamanaCombo.getItemCount()-1);
currentSapt = Integer.parseInt(saptamanaCombo.getSelectedItem().toString());

所以基本上saptamani[n] = n+1和ComboBox显示值1,...,n和组合中的选定项应该是最后一项n,而currentSapt应该同等地保存最大值n。由于这个最大的项目n正是你得到的结果getSamtamani(),你可以重写为

    int sapt = getSaptamani();
    saptamani = new Integer[sapt];
    for(int i = 1; i <= sapt; i++) {
        saptamani[i-1] = i;
    }
    saptamanaCombo = new JComboBox<Integer>(saptamani);
    saptamanaCombo.setSelectedIndex(saptamanaCombo.getItemCount()-1);

    currentSapt = sapt; //Last value = sapt

这应该摆脱讨厌的NPE - 但是你的问题很可能位于getSamtamani()中,正如最初所说的那样返回0。