Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Swing Worker加载DefaultComboxModel_Java_Swing - Fatal编程技术网

Java 使用Swing Worker加载DefaultComboxModel

Java 使用Swing Worker加载DefaultComboxModel,java,swing,Java,Swing,我试图在按钮的触发器中使用SwingWorker加载JComboBox值。但是单击按钮不会加载JComboBox中的值。我通过publish()方法发送数据,并使用process()接收数据。但是将元素映射到myJComboBox不会设置模型。有什么原因吗 private Map<JComboBox, DefaultComboBoxModel> puta() { Map<JComboBox, DefaultComboBoxModel> map = new Hash

我试图在按钮的触发器中使用SwingWorker加载JComboBox值。但是单击按钮不会加载JComboBox中的值。我通过
publish()
方法发送数据,并使用
process()
接收数据。但是将元素映射到my
JComboBox
不会设置模型。有什么原因吗

private Map<JComboBox, DefaultComboBoxModel> puta()
{
    Map<JComboBox, DefaultComboBoxModel> map = new HashMap<>();
    map.put(view.getCb(), (DefaultComboBoxModel)view.getCb().getModel());
    return map;
}

class ButtonListener implements ActionListener
{

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        //Show Internal Frame
        createFrame();

        new ComboBoxWorker(puta()).execute();
    }

}

 private class ComboBoxWorker extends SwingWorker<Void, List>
 {
    public final Map<JComboBox, DefaultComboBoxModel> map;

    public ComboBoxWorker(Map<JComboBox, DefaultComboBoxModel> map)
    {
        this.map = map;
    }

    @Override
    protected Void doInBackground() throws Exception 
    {
        List list = new ArrayList();
        list.add(model.setGender());

        publish(list);

        return null;
    }

    @Override
    protected void process(List chunks) 
    {
        map.get(view.getCb()).addElement(chunks);
    }
}
private Map puta()
{
Map Map=newhashmap();
map.put(view.getCb(),(DefaultComboBoxModel)view.getCb().getModel());
返回图;
}
类ButtonListener实现ActionListener
{
@凌驾
已执行的公共无效操作(操作事件e)
{
//显示内部框架
createFrame();
新的ComboBoxWorker(puta()).execute();
}
}
私有类ComboBoxWorker扩展SwingWorker
{
公共最终地图;
公共ComboxWorker(地图)
{
this.map=map;
}
@凌驾
受保护的Void doInBackground()引发异常
{
列表=新的ArrayList();
list.add(model.setGender());
公布(名单);
返回null;
}
@凌驾
受保护的无效进程(列表块)
{
map.get(view.getCb()).addElement(chunks);
}
}

您可能无法从EDT以外的其他线程访问swing组件及其模型,但您可以通过从doInBackground填充组合框来访问swing组件及其模型。可能还有其他问题,但您的代码远未完成,所以…@jbnize我为每个swing组件制作了一个getter,并创建了它的类的实例。在创建另一个帧时,我是否仍应使用wrap
run
方法?我不知道你在说什么。如何获取与您的问题相关的组件?创建一个与您的问题相关的jframe如何?你说的是哪种跑步方法?用什么包起来?从零开始提问,告诉你想要实现什么,发布一个最小但完整的、可运行的示例,展示你尝试过的代码,解释它应该做什么以及它应该做什么。你应该阅读SwingWorker教程,了解它如何将数据从后台线程传输到EDTHi@疯狂的程序员。我刚刚更新了我的代码。我通过
publish()
方法传输数据,但无法在组合框中添加元素。