java - JComboBox 触发空指针,即使它没有被调用?

标签 java

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

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();

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

最佳答案

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

提出了规避此问题的方法 here

关于java - JComboBox 触发空指针,即使它没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61261832/

相关文章:

java - JOptionPane.showInputDialog 中的多个输入

java - 如何在没有反射的情况下确定java中泛型属性的类类型?

java - JPA 多对一关系 CascadeType 行为

Java 正在读取旧的输入文件,而不是新的输入文件

java - 从特定文件夹生成随机图像

java - 您应该将扩展 Application 的类放置在 jax.rs 中的何处

java - 我需要提取数字位置(例如十分位、百分之位等......)

java - 获取 int[] 的排列,删除重复集

java - 从 Maven 远程存储库中删除版本

java - 我们应该使用什么原语或什么类型来表示 java 中的电话号码?