【问题标题】:JComboBox triggering null pointer even though it was not called on?JComboBox即使没有被调用也会触发空指针?
【发布时间】:2020-04-16 23:31:24
【问题描述】:

从事学校项目。我的程序有一个 jcombobox 的动作监听器,一旦我点击提交,就会清除该框并将其隐藏。那是它说空指针的时候,即使我没有使用它或在清除它后单击它。此外,它只在我第一次清除时发生。

JComboBox sidComboBox = new JComboBox();
        sidComboBox.setFont(new Font("Lantinghei TC", Font.PLAIN, 15));
        sidComboBox.setBounds(139, 127, 222, 27);
        contentPane.add(sidComboBox);
        
         btnSubmit.addActionListener (new ActionListener ()  //adding action listener to the button component and creating a specific action performed method (override) for the button
	                {
	                    public void actionPerformed (ActionEvent e)
	                    {        
	                    	
	                    	
	                    	if (btnSelect == 5)
	                    	{
	                    		sidComboBox.setEnabled(false);
	                    		sidComboBox.setVisible(false);
	                    		fnComboBox.setEnabled(false);
	                    		lnComboBox.setEnabled(false);
	                    		pnComboBox.setEnabled(false);
	                    		fnComboBox.setVisible(false);
	                    		lnComboBox.setVisible(false);
	                    		pnComboBox.setVisible(false);
	                    	}
	                    	
	                    	btnAdd.setEnabled(true);  
	                    	btnEdit.setEnabled(true);  
	                    	btnDelete.setEnabled(true);  
	                    	btnSearch.setEnabled(true);  
	                    	btnViewAll.setEnabled(true);    
	                    	
	                    	TAFirstName.setVisible(false);
	                		TALastName.setVisible(false);
	                		TAStudentID.setVisible(false);
	                		TAPhoneNumber.setVisible(false);
	                		lblFirstName.setVisible(false);
	                		lblLastName.setVisible(false);
	                		lblPhoneNumber.setVisible(false);
	                		lblStudentId.setVisible(false);
	                		btnSubmit.setVisible(false);
	                		btnSubmit.setEnabled(false);
	                		btnEditor.setVisible(false);
	                        btnEditor.setEnabled(false);

	    			        TAFirstName.setEditable(false);
	    			        TALastName.setEditable(false);
	    			        TAStudentID.setEditable(false);
	    			        TAPhoneNumber.setEditable(false);
	    			        
	    			        TAFirstName.setText(null);
                    		TALastName.setText(null);
                    		TAStudentID.setText(null);
                    		TAPhoneNumber.setText(null);
                    		
                    		sidComboBox.setVisible(false);
                    		sidComboBox.setEnabled(false);
                    		sidComboBox.removeAllItems();
                    		fnComboBox.setVisible(false);
                    		fnComboBox.setEnabled(false);
                    		fnComboBox.removeAllItems();
                    		lnComboBox.setVisible(false);
                    		lnComboBox.setEnabled(false);
                    		lnComboBox.removeAllItems();
                    		pnComboBox.setVisible(false);
                    		pnComboBox.setEnabled(false);
                    		pnComboBox.removeAllItems();
                    		
	    			        btnSelect = 0;

	                    }
	                }
	        );  
		 
		 sidComboBox.addActionListener (new ActionListener ()  //adding action listener to the button component and creating a specific action performed method (override) for the button
	                {
	                    public void actionPerformed (ActionEvent e)
	                    {      
	                    	int check = db.getNum() - 1;
	                        if (check == -1) {
	                        	
	                    	}
	                    	
	                    	else {
	                    		int studentID = (int) sidComboBox.getSelectedItem();
	                    		int num = db.getNum();
	        			    
	                    		for (int b1 = 0; b1 < num; b1++)
	                    		{
	                    			int nom = (db.studentList[b1].getStudentID());
	        			    	
	                    			if (studentID == nom)
	                    			{
	                    				fnComboBox.setSelectedItem((db.studentList[b1]).getFirstName());
	                    				lnComboBox.setSelectedItem((db.studentList[b1]).getLastName());
	                    				pnComboBox.setSelectedItem((db.studentList[b1]).getPhoneNumber());
	                    				break;
	                    			}	   	                    			
	                    		}
	                    		
	                    		
	                    	}
	    			        
	                    }
	                }
	        );    

错误发生在这一行,不是在我使用它时,而是在我点击提交按钮时。

int studentID = (int) sidComboBox.getSelectedItem();

我知道它为空,但当它为空时我不会调用该框。那么为什么它告诉我它的 null 呢??

【问题讨论】:

    标签: java


    【解决方案1】:

    问题是您在提交方法中调用sidComboBox.removeAllItems();。这会更改选择并因此触发ActionEvent,如教程here 中所述。

    提出了避免这种情况的方法here

    【讨论】:

    • 谢谢!当我点击提交时删除动作监听器的最简单方法是什么,然后在提交功能完成后立即将其添加回来?
    • 其实不用担心我想通了。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2018-02-09
    • 1970-01-01
    相关资源
    最近更新 更多