2017-10-18 21 views
0

Actuellement, j'écris un petit outil avec Java. Le problème que j'ai est le suivant: Quand j'appuie sur un bouton, deux choses doivent commencer simultanément.Bouton ActionEvent envoyer un e-mail et afficher l'écran de chargement simultanément

  1. Démarrer une iconImage image chargement (gif)
  2. Envoyer un e-mail avec pièce jointe (utilisé cette code)

J'ai actuellement le code suivant, qui envoie l'e-mail parfaitement, mais il n'y a pas d'image visible. J'ai également essayé de démarrer un nouveau thread mais j'ai reçu beaucoup d'exceptions de la classe SendEmail. Aucune suggestion?

 btnWeiter4.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent arg0) { 

      URL loader = KeyLogger.class.getResource("/ajax-loader.gif"); 
      JLabel loading = new JLabel("loading ...\r\n"); 
      loading.setIcon(new ImageIcon(loader)); 
      loading.setVisible(true); // show loading image 
      loading.setBounds(1087, 599, 121, 45); 
      panel_4.add(loading);    

      SendEmail email = new SendEmail(); 
      email.send(); // sends email 
      } 
     }); 

Mise à jour:

Il semble qu'il y ait un ordre. D'abord l'email est envoyé et après que mon image de chargement est montrée même si je setVisible(true) au tout début.

Solution:

je classe interne anonyme pour créer un nouveau fil pour envoyer des e-mail et je me suis déplacé le file.delete(); intérieur SendEmail classe. Fonctionne très bien pour moi

new Thread() { 
    public void run() { 
     SendEmail email = new SendEmail(); 
     email.send(); // sends email 
    } 
}.start(); 

Répondre

0

Je pense que le problème est que la méthode setIcon attend une chaîne et non une URL, essayez comme ça.

Mise à jour Maintenant, vous pouvez voir quand exactement quelle partie du code est exécuté

btnWeiter4.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent arg0) { 


       JLabel loading = new JLabel("loading ...\r\n"); 
       loading.setBounds(1087, 599, 121, 45); 
       loading.setIcon(new ImageIcon("ajax-loader.gif")); // Check whether the gif file is really in the root folder 
       loading.setVisible(true); // show loading image 
     String currentTime = String.valueOf(System.currentTimeMillis()); 
System.out.println("Im done with JPanel " + currentTime); 
       panel_4.add(loading);    

       SendEmail email = new SendEmail(); 
       email.send(); // sends email 
    String currentTime2 = String.valueOf(System.currentTimeMillis()); 
System.out.println("Im done with Email sending " + currentTime2); 

       } 
      }); 
+0

voir post updatet. – WirJun

+0

Je ne pense pas que l'e-mail est envoyé avant d'afficher le Jlabel, le code ActionEvent sera exécuté de haut en bas, comment mesurez-vous le temps d'envoi d'e-mail? –

+0

Parce que le bouton est gelé pendant une courte période de temps 1-2 secondes et après que l'image est visible – WirJun