pro*_*mad 1 java swing netbeans nullpointerexception jlist
NetBeans的.使用IDE创建的UI.我的实施顺序出现:
1个全局表单变量:
private DefaultListModel model;
Run Code Online (Sandbox Code Playgroud)
2构造函数:
ArrayList<String> cameras = repository.getCameraNames();
model= new DefaultListModel();
for (int i = 0; i < cameras.size(); i++) {
model.addElement(cameras.get(i));
}
thelist.setModel(model);
Run Code Online (Sandbox Code Playgroud)
3删除按钮:
private void btnRemoverActionPerformed(java.awt.event.ActionEvent evt) {
int index = thelist.getSelectedIndex();
model.removeElementAt(index);
}
Run Code Online (Sandbox Code Playgroud)
在removeElementAt行,我得到NullPointerException.如果我更改显式数字的索引,它可以工作但不与索引变量一起使用.但是选中的索引,不起作用!
有人可以帮忙吗?
哦,这里有一些stackttrace:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at FrmPrincipal.thelistValueChanged(FrmPrincipal.java:217)
at FrmPrincipal.access$000(FrmPrincipal.java:22)
at FrmPrincipal$1.valueChanged(FrmPrincipal.java:77)
at javax.swing.JList.fireSelectionValueChanged(JList.java:1798)
at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1812)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:164)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:211)
at javax.swing.DefaultListSelectionModel.removeIndexInterval(DefaultListSelectionModel.java:677)
at javax.swing.plaf.basic.BasicListUI$Handler.intervalRemoved(BasicListUI.java:2601)
at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:179)
at javax.swing.DefaultListModel.removeElementAt(DefaultListModel.java:332)
Run Code Online (Sandbox Code Playgroud)
UPDATE
我修改了以下方法:
private void thelistValueChanged(javax.swing.event.ListSelectionEvent evt) {
txtCameraName.setText(thelist.getSelectedValue().toString());
}
Run Code Online (Sandbox Code Playgroud)
至
private void thelistValueChanged(javax.swing.event.ListSelectionEvent evt) {
txtCameraName.setText((String)thelist.getSelectedValue());
}
Run Code Online (Sandbox Code Playgroud)
但我不知道为什么!有人可以解释为什么它不接受toString()并接受转换?
您的更改"修复"了您的问题,因为getSelectedValue().toString()如果没有选择则会抛出NPE,而如果没有选择(String)getSelectedValue()则会评估null.但是,如果您在列表中放入的东西不是Strings,那么ClassCastException当您尝试将所选值转换为a时,您将得到s String.所以,这可能已经解决了您当前的问题,但实际上并不是解决方案.
我会这样做:
private void theListValueChanged(ListSelectionEvent e) {
final Object selectedValue = theList.getSelectedValue();
if ( selectedValue != null ) {
txtCameraName.setText( selectedValue.toString() );
} else {
// Clear the text since there's no selection
txtCameraName.setText( null );
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2492 次 |
| 最近记录: |