我正在尝试在另一台机器上运行我的jar文件(而不是在开发机器上)。运行它会给我一个null异常,而在dev机器上运行会按预期运行。真的不明白为什么。这是我得到例外的一行:
currentSapt = Integer.parseInt(saptamanaCombo.getSelectedItem()。toString());
'currentSapt'为int,'saptamnaCombo'为组合框。任何帮助将非常感激。
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());
答案 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。