SwingWorker:非法启动类型

时间:2012-02-10 14:43:47

标签: java swing swingworker

这是导致我的问题的一段代码:

   SwingWorker <Vector,void> sw=new SwingWorker <Vector,void>(){

     @Override
        protected Vector doInBackground() throws Exception {

             TvaJpaController tjc =new TvaJpaController(emf);
           Vector  l_tva=null;

          try{
         l_tva= (Vector) tjc.findTvaEntities();

             }
        catch(javax.persistence.PersistenceException e)
             {

             javax.swing.JOptionPane.showMessageDialog(null,"please check your internet connecting"); 

             } 
       return l_tva;
     }

     @Override
        protected void done() {
     Vector   l_tva=null;
            try {
                  l_tva=get();
            } catch (InterruptedException ex) {
                Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ExecutionException ex) {
                Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
            }

         int n =  l_tva.size();
          for(int i=0;i<n;i++){
       Tva tva =(Tva)l_tva.elementAt(i);
   tva_article.addItem(tva.getIdtva());

   }

     }
   };

    sw.execute(); 

这一行:

SwingWorker <Vector,void> sw=new SwingWorker <Vector,void>()

给出错误:非法启动类型... 我认为我的问题是由于“矢量”,但我不知道如何解决.. 任何帮助?

2 个答案:

答案 0 :(得分:3)

不,问题是void的使用,它不是有效的类型参数。您可以使用SwingWorker<Vector, Void>。 (注意void(一个Java关键字)和Void(引用java.lang.Void类型)之间的区别。)

我个人建议优先使用List<E>明确使用Vector,并尽可能使用ArrayList<E>作为实现而不是Vector,但是这是一个单独的问题 - 只有void / Void会导致您立即出现问题。

答案 1 :(得分:2)

,第二个问题是关于错误地使用方法get()到SwingWorker的void done()中,因为只返回SwingWorker的异常(并且只有在存在异常的情况下),更多关于方法{的用法我question

中的{1}}