2016-06-12 8 views
0

Ein Problem: habe eine einfache GUI-App mit einer einzigen Taste, wenn ich die Taste drücken soll es eine Nachricht drucken und nach 2 Sekunden sollte eine andere Nachricht drucken, aber wenn ich Thread.sleep verwenden (x); es kann den Code oben nicht ausführen und wartet, dann ist dies der Code:JAVA drücken Sie die Taste und warten Sie einige Sekunden

private void button1(java.awt.event.ActionEvent evt){ 

System.out.println("lol 1"); 

try { 
     Thread.sleep(2000); 
    } catch (InterruptedException ex) { 
     System.out.println("error"); 
} 

System.out.println("lol 2"); 
} 

Aber das funktioniert nicht, wie ich .. will weil es 2 Sekunden warten und druckt dann lol 1 und lol 2.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    // TODO add your handling code here: 
    PSCGenerator ps = new PSCGenerator(); 
    String pin = jTextField1.getText(); 
    String msg[] = {"Cracking the database...\n","Database Cracked succesfully!\n","Running the exploit...\n","Passing '"+pin+"' to the exploit..\n","New code succesfully spoofed!\n"}; 
    int time[] = {2000,1400,1000,2500}; 
    int x=0; 
    long k=2000; 
    jTextArea1.append(msg[x]); 
    try { 
     Thread.sleep(k); 
    } catch (InterruptedException ex) { 
     Logger.getLogger(PSCGUI.class.getName()).log(Level.SEVERE, null, ex); 
    } 

// creando un sistema che aspetta qualche secondo prima di continuare per la falsa Konsole System.out.println ("lol"); }

+1

Das bezweifle ich. Veröffentlichen Sie ein minimales, vollständiges Programm, das das Problem reproduziert. Meine Vermutung ist, dass Sie nicht wirklich System.out.println() verwenden, sondern stattdessen versuchen, Text in Ihrer Benutzeroberfläche anzuzeigen. Frieren Sie den UI-Thread nicht mit sleep() ein. Verwenden Sie einen javax.swing.Timer. Diese Frage wurde tausendmal gestellt, aber ich bin zu faul, das beste Duplikat zu finden. Lesen Sie das Swing-Tutorial über Nebenläufigkeit. –

Antwort

0

Sie Timer verwenden können

private void button1(java.awt.event.ActionEvent evt){ 
    Timer timer = new Timer(ms_you_wanna_wait, new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent arg0) { 
     // do your thing here 
     } 
    }); 
    timer.setRepeats(false); 
    timer.start(); 
} 

[Bearbeiten] Sehen, dass Sie so viel Mühe haben, habe ich eine kleine Probe hier:

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 


import javax.swing.*; 


public class Swing extends JFrame { 

    JTextArea area; 
    public Swing() { 
     initUI(); 
    } 

    public final void initUI() { 

     JPanel panel = new JPanel(); 
     getContentPane().add(panel); 

     panel.setLayout(null); 

     area = new JTextArea(); 
     area.setBounds(10, 60, 80, 30); 
     panel.add(area); 

     JButton jButton = new JButton("Click"); 
     jButton.setBounds(90, 60, 80, 30); 
     jButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       delayedAction(); 
      } 
     }); 

     panel.add(jButton); 

     setTitle("Quit button"); 
     setSize(300, 200); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) { 

     Swing ex = new Swing(); 
      ex.setVisible(true); 

    } 

    public void delayedAction(){ 
     String pin = area.getText(); 
     String msg[] = {"Cracking the database...\n","Database Cracked succesfully!\n","Running the exploit...\n","Passing '"+pin+"' to the exploit..\n","New code succesfully spoofed!\n"}; 
     int time[] = {2000,1400,1000,2500}; 
     int x=0; 
     long k=2000; 

     Timer timer = new Timer(1000, new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       // TODO add your handling code here: 
       //PSCGenerator ps = new PSCGenerator(); 

       area.append(msg[x]); 
      } 
     }); 
     timer.setRepeats(false); 
     timer.start(); 
    } 
} 
+0

Ja Ihr Timer funktioniert ordnungsgemäß, aber ich muss die Nachricht ändern, um zu zeigen, aber wenn ich es ändern, viele Fehler auftreten, kann ich nicht ein Array verwenden, um die Nachricht zu ändern: wie jTextArea1.append (msg [x]); – EzLemon

+0

überprüfen Sie bitte bearbeiten. –

Verwandte Themen