首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JList操作JList?

如何使用JList操作JList?
EN

Stack Overflow用户
提问于 2012-10-18 02:42:46
回答 1查看 753关注 0票数 1

我有两个JLists,另一个有武器类别(我正在做角色扮演角色创建软件),另一个有特定类别的物品。我想让商品根据类别变化。

目前,每次用户更改类别(每个DefaultListModel变量都有不同的项集)时,带有项目的jList都会交换它的DefaultListModel,这会在用户更改类别后单击某个项目时以某种方式生成NullPointerException。

我试着在网上搜索它,我也读过JList的例子,但是我还没能解决这个问题。

下面是相关的代码

代码语言:javascript
复制
private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) { //Kategory
    String selection = jList1.getSelectedValue().toString();

    if(selection.equals(settings.weapon_classes[0])){
        jList2.clearSelection();
        jList2.setModel(model_l_pistols);
        jList2.validate();

    }
    if(selection.equals(settings.weapon_classes[1])){
        jList2.clearSelection();
        jList2.setModel(model_m_pistols);
        jList2.validate();
    }
}

private void wpn_available_valuechanged_listener(javax.swing.event.ListSelectionEvent evt) {                                                     

     Weapon wpn = new Weapon(); //The details of selected weapon are stored here for desplaying
        try{
            String wpn_name = jList2.getSelectedValue().toString();
            if(jList1.getSelectedValue().equals("Light pistols")){
                wpn = controller.get_Weapon(wpn_name, settings.light_pistols); //Stores right item details from array in settings class
            }
            if(jList1.getSelectedValue().equals("Medium pistols")){
                wpn = controller.get_Weapon(wpn_name, settings.medium_pistols);
            }

        }catch(Exception e){
            System.out.println(e + "String wpn_name = jList2.getSelectedValue().toString();");
        }
}

下面是我在NetBeans集成开发环境下运行我的程序时得到的错误消息(第一行包含了我的try/catch块打印的异常:

代码语言:javascript
复制
java.lang.NullPointerExceptionString wpn_name = jList2.getSelectedValue().toString();
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at charcreation.GUI.wpn_available_valuechanged_listener(Unknown Source)
    at charcreation.GUI.access$6900(Unknown Source)
    at charcreation.GUI$67.valueChanged(Unknown Source)
    at javax.swing.JList.fireSelectionValueChanged(JList.java:1765)
    at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1779)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:388)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:398)
    at javax.swing.DefaultListSelectionModel.removeSelectionIntervalImpl(DefaultListSelectionModel.java:559)
    at javax.swing.DefaultListSelectionModel.clearSelection(DefaultListSelectionModel.java:403)
    at javax.swing.JList.clearSelection(JList.java:2013)
    at charcreation.GUI.jList1ValueChanged(Unknown Source)
    at charcreation.GUI.access$6800(Unknown Source)
    at charcreation.GUI$66.valueChanged(Unknown Source)
    at javax.swing.JList.fireSelectionValueChanged(JList.java:1765)
    at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1779)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:388)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:398)
    at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:442)
    at javax.swing.JList.setSelectionInterval(JList.java:2035)
    at javax.swing.plaf.basic.BasicListUI$Handler.adjustSelection(BasicListUI.java:2731)
    at javax.swing.plaf.basic.BasicListUI$Handler.mousePressed(BasicListUI.java:2687)
    at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:263)
    at java.awt.Component.processMouseEvent(Component.java:6260)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6028)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4630)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4235)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2475)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
EN

回答 1

Stack Overflow用户

发布于 2013-09-13 21:31:50

可能的错误在此行中

代码语言:javascript
复制
String selection = jList1.getSelectedValue().toString();

jList1.getSelectedValue()可以是空值,因此当toString()函数对空值进行调用时,它会抛出异常

而应使用此方法来避免异常

代码语言:javascript
复制
String selection = String.valueOf(jList1.getSelectedValue());

这样,如果选择为空,您将只返回null的字符串值;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12941109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档