2016-06-12 13 views
0

問題:ボタンを押すとメッセージを表示し、2秒後に別のメッセージが表示されるはずですが、Thread.sleep (バツ);それは2秒待ってから、笑1を印刷し、原因笑。2.JAVAボタンを押して数秒待つ

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"); 
} 

しかし、私が望むように、これは動作しません:それはそれより上のコードを実行し、待機していない、これはコードです

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アンチェSISTEMA aspetta qualcheセコンドプリマ・ディcontinuareあたりラfalsaコンソール のSystem.out.println( "笑"); }

+1

私はそれを疑います。問題を再現する最小限の完全なプログラムを投稿してください。私の推測では、実際にはSystem.out.println()を使用していないのですが、UIにテキストを表示しようとしています。 sleep()を使用してUIスレッドをフリーズしないでください。 javax.swing.Timerを使用します。この質問は何度も聞かれましたが、私は最高の重複を見つけるのが面倒です。並行性についてのスイングチュートリアルを読んでください。 –

答えて

0

あなたはそんなにトラブルを抱えていることを見てタイマー

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(); 
} 

[編集]を使用することができ、私はここに小さなサンプルを置く:

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

はい、あなたのタイマーは正常に動作しますが、表示するにはteメッセージを変更する必要がありますが、変更すると多くのエラーが発生し、メッセージを変更するために配列を使用することはできません:like jTextArea1.append(msg [x]); – EzLemon

+0

チェック編集してください。 –

関連する問題