Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带循环的计时器始终重复第一个结果java?_Java_Loops_Timer - Fatal编程技术网

带循环的计时器始终重复第一个结果java?

带循环的计时器始终重复第一个结果java?,java,loops,timer,Java,Loops,Timer,我多次尝试使用此代码,多次让它在字母之间等待4秒打印字母,但它只打印第一个字母,然后一直重复 StatusBar.getInstance().ShowMoves.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { StatusBar.getInstance().ShowMoves.setEnabled(false);

我多次尝试使用此代码,多次让它在字母之间等待4秒打印字母,但它只打印第一个字母,然后一直重复

 StatusBar.getInstance().ShowMoves.addActionListener(new ActionListener() {

     @Override
     public void actionPerformed(ActionEvent e) {
         StatusBar.getInstance().ShowMoves.setEnabled(false);
         sol=null;
         sol = StatusBar.getInstance().getSolution();
         Timer timer = new Timer(); 
         for (int tbn = 0; tbn < sol.length(); tbn++) { 
             temp = tbn ;

             timer.schedule(new TimerTask() {
                 @Override                                
                 public void run() {                        
                     switch (sol.charAt(temp)) {   
                         case 'u': 
                             StatusBar.getInstance().TimeTaken.setText(StatusBar.getInstance().TimeTaken.getText()+"u");
                             break;
                         case'd':
                             StatusBar.getInstance().TimeTaken.setText(StatusBar.getInstance().TimeTaken.getText()+"d");
                             break;
                         case'l':
                             StatusBar.getInstance().TimeTaken.setText(StatusBar.getInstance().TimeTaken.getText()+"l");
                             break;
                         case'r':
                             StatusBar.getInstance().TimeTaken.setText(StatusBar.getInstance().TimeTaken.getText()+"r");
                             break;
                         }        
                         try {
                            Thread.sleep(1000);
                         } catch (InterruptedException ex) {
                             Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex);
                         }
                     }}, 4000);
                 }
             }
         }
     );                                                                                               
     this.pack();

     KeyboardFocusManager.getCurrentKeyboardFocusManager()
            .addKeyEventDispatcher(Controller.getInstance());
 }
StatusBar.getInstance().ShowMoves.addActionListener(新ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
StatusBar.getInstance().ShowMoves.setEnabled(false);
sol=null;
sol=StatusBar.getInstance().getSolution();
定时器=新定时器();
对于(int-tbn=0;tbn

代码有什么问题

摘自文件,参考资料如下:

代码:

public class Test {
    public static void main(String args[])
        throws InterruptedException {
        String importantInfo[] = {
            "Mares eat oats",
            "Does eat oats",
            "Little lambs eat ivy",
            "A kid will eat ivy too"
        };

        for (int i = 0;
             i < importantInfo.length;
             i++) {
            //Pause for 4 seconds
            Thread.sleep(4000);
            //Print a message
            System.out.println(importantInfo[i]);
        }
    }
}
公共类测试{
公共静态void main(字符串参数[])
抛出中断异常{
字符串重要性信息[]={
“母马吃燕麦”,
“他吃燕麦吗”,
“小羊羔吃常春藤”,
“孩子也会吃常春藤”
};
对于(int i=0;
i<重要信息长度;
(i++){
//暂停4秒钟
睡眠(4000);
//打印消息
系统输出打印LN(重要信息[i]);
}
}
}
参考资料:


我通过将循环放在计时器中而不是将计时器放在循环中解决了这个问题

StatusBar.getInstance().ShowMoves.addActionListener(new ActionListener(){

                @Override
                public void actionPerformed(ActionEvent e) {
                    StatusBar.getInstance().ShowMoves.setEnabled(false);
                    sol=null;
                    sol = StatusBar.getInstance().getSolution();
                    Timer timer = new Timer(); 

                    timer.schedule(new TimerTask() {
                    @Override                                
                    public void run() {

                        for (int tbn = 0; tbn < sol.length(); tbn++)
                    { 
                    switch (sol.charAt(tbn))
                    {

                        case 'u':
                            GamePanel.getInstance().moveUp();
                    {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException ex) {
                            Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                            break;
                        case'd':
                        GamePanel.getInstance().moveDown();
                        {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException ex) {
                            Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                            break;
                        case'l':
                         GamePanel.getInstance().moveLeft();
                        {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException ex) {
                            Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                            break;
                        case'r':
                        GamePanel.getInstance().moveRight();
                        {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException ex) {
                            Logger.getLogger(Game.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                            break;

                    }} 


                             }}, 1000);

                    }






                }


            );




    this.pack();

    KeyboardFocusManager.getCurrentKeyboardFocusManager()
            .addKeyEventDispatcher(Controller.getInstance());
}
StatusBar.getInstance().ShowMoves.addActionListener(新ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
StatusBar.getInstance().ShowMoves.setEnabled(false);
sol=null;
sol=StatusBar.getInstance().getSolution();
定时器=新定时器();
timer.schedule(新TimerTask(){
@凌驾
公开募捐{
对于(int-tbn=0;tbn
您会发现这篇文档很有帮助:我使用了thread.sleep(不带计时器),就像这段代码一样,但它与JLabel同时显示所有字母,但与System.out.prin配合使用效果很好