Wie führe ich einen thread auf JButton?

Studiere ich java von „The Complete Reference“ von Herbert Schidlt.
In dem Buch, ist es ratsam, wenn jeder Teil von dir-GUI braucht, um etwas zu tun, die kann sich länger auf ein Ereignis generation, dann sollten wir realisieren, dass die Sache ein neuer Thread.

So, ich habe eine GUI zum versenden von E-mails in meinem Posteingang, die funktioniert gut, aber es dauert 2-3 Sekunden um die mail zu senden, und damit die Sende-Taste braucht auch Zeit, um wieder zu seiner normalen Zustand(bleibt gedrückt, bis der listener antwortet, als In Listener, implementierte ich den code um E-mail senden).

Um dies zu vermeiden, versuche ich zu laufen, einen thread auf diese „Senden“ – Button, so dass wenn der Taster gedrückt wird, wird ein mouseEvent generiert werden, & auf das mouseEvent, ich will führen Sie den Faden so, dass der Hörer antwortet sofort und Nachrichten senden durch einen thread statt.

Wie implementiere ich diese Regelung ? Ich habe versucht, die Umsetzung neuer Thread als innere Klasse in der MouseEvent, aber ich kann nicht herausfinden, wie ich den Aufruf der start-Methode !

der code ist groß, so dass ich nur die „Senden-Taste“ code hier.

sendButton.addMouseListener(new MouseAdapter(){
  public void mouseClicked(MouseEvent me){

    String id=emailIdField.getText();
    String subject=subjectField.getText();
    String body=mailBodyArea.getText();                   
    String user= "[email protected]";
    String pass="password";
    String host="smtp.gmail.com";
    sendEmail= new SendEmail(); //class which actually sends the mail. defined in other file.
    sendEmail.sendMail( id, user, subject ,body ,host, user, pass ); 
}
});

Ich möchten, führen Sie den code in dieser Funktion MouseClicked ein neuer Thread. Was ich bisher versucht habe ist,

sendButton.addMouseListener(new MouseAdapter(){
  public void mouseClicked(MouseEvent me){

    new Runnable(){

                public void run(){
                   String id=emailIdField.getText();
            String subject=subjectField.getText();
            String body=mailBodyArea.getText();
            System.out.println(id);
            System.out.println(subject);
            System.out.println(body);
            String user= "[email protected]";
            String pass="impe(*&amit";
            String host="smtp.gmail.com";
            sendEmail= new SendEmail();
            sendEmail.sendMail( id, user, subject ,body ,host, user, pass ); 


                }
            };   
});

Aber jetzt weiß ich nicht, wie rufe ich die start-Methode auf diesen thread ? Bitte beraten.

  • Thread t = new Thread(runnable); t.start();
  • wo genau Schreibe ich diese Aussage ?
InformationsquelleAutor san A | 2016-03-11



One Reply
  1. 1

    Innen mouseCliked Funktion hinzufügen:

    new Thread() {
    public void run() {
        String id=emailIdField.getText();
        String subject=subjectField.getText();
        String body=mailBodyArea.getText();
        System.out.println(id);
        System.out.println(subject);
        System.out.println(body);
        String user= "[email protected]";
        String pass="impe(*&amit";
        String host="smtp.gmail.com";
        sendEmail= new SendEmail();
        sendEmail.sendMail( id, user, subject ,body ,host, user, pass );
    }
    }.start();
    • vielen Dank. es hat geklappt ! 🙂
    • Dieses Beispiel funktioniert, aber es ist ein Beispiel für eine schlechte Praxis ist, nämlich: die Schaffung eines new Thread jedes mal, wenn Sie ausführen, eine einzelne Aufgabe. Es ist besser ein threadpool (z.B. über ein ExecutorService oder mit einem SwingWorker), weil die Schaffung und Vernichtung von Thread Objekte ist teuer. In diesem Fall, kein Schaden ist getan, denn das system kann erstellen und zerstören von Threads schneller als die Benutzer können auf die Schaltfläche klicken, aber auch so, es ist eine schlechte Angewohnheit, zu gehen ‚round aufrufen new Thread für kurzlebige Aufgaben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.