Visualizzazione dei risultati da 1 a 10 su 22

Hybrid View

  1. #1
    allora, nell'actionPerformed richiamo questo metodo:
    codice:
        private void createConnection() {
            try {
                if (CheckConnection.check()) {
                    JDialog jd = new JDialog(this, true);
                    jd.add(BorderLayout.CENTER, new JLabel("...LOADING..."));
                    jd.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
                    jd.setSize(300, 75);
                    jd.setResizable(false);
                    jd.setLocationRelativeTo(this);
                    LoadingDialog ld = new LoadingDialog(jd);
                    ld.execute();
                } else {
                    JOptionPane.showMessageDialog(null, "No connection");
                }
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(null, ex.getMessage());
            }
        }
    nello swing worker:
    codice:
    public class ServiceWorker extends SwingWorker<Object, Object> {
    
        private Service jsb;
        private JDialog jd;
    
        public ServiceWorker(JDialog jd) {
            jsb = new Service();
            this.jd = jd;
        }
    
        @Override
        protected Object doInBackground() throws Exception {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                   jd.setVisible(true);
                    try {
                        jsb.launchService("all_books");
                        jsb.launchService("all_authors");
                        jsb.launchService("all_editors");
                        jsb.download(UrlAndPath.JSON_LIBRI);
                        jsb.download(UrlAndPath.JSON_AUTORI);
                        jsb.download(UrlAndPath.JSON_EDITORI);
                        jsb.download(UrlAndPath.GRAPH_AUTHORS);
                    } catch (IOException ex) {
                        JOptionPane.showMessageDialog(null, ex.getMessage());
                    }
                }
            });
            return null;
        }
        
        @Override
        protected void done() {
            jd.setVisible(false);
        }
    
    }
    così mi pare che vada.
    dal punto di vista logico invece, andrebbe bene??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    così mi pare che vada.
    dal punto di vista logico invece, andrebbe bene??
    Alt ... n'attimo.
    Innanzitutto uno degli obiettivi di SwingWorker è proprio quello di evitare (il più possibile) al programmatore di dover fare, durante un lavoro "lungo", i noiosi invokeLater con il solito Runnable anonimo. Se nel doInBackground ti metti a fare invokeLater ..... forse non stai sfruttando proprio bene SwingWorker ...

    Inoltre launchService/download di Service cosa fanno? Fanno del lavoro "lungo"? E allora perché lo fai eseguire nel EDT?
    Perché così, tra l'altro, il doInBackground ti dura niente ... nel senso che è praticamente quasi istantaneo ..... e allora ripeto: cosa ti serve così SwingWorker?
    Ultima modifica di andbin; 09-12-2013 a 15:18
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.