2016-02-28 3 views
0

Так у меня есть такой код:После задержки представить JOptionPane и продолжить цикл

for (int i = 0; i < totalNumPlayers; i++) { 

       runTimer(30, myTextArea); 

       players.get(i).bet = JOptionPane.showInputDialog(players.get(i).name + ", please enter your bet: "); 

      } 

Мне нужно автоматически отправить JOptionPane (со значением ИНТ по умолчанию) после того, как истечет таймер.

код моего таймера:

ScheduledExecutorService scheduledExecutorService = 
      Executors.newScheduledThreadPool(1); 

    ScheduledFuture scheduledFuture = scheduledExecutorService.schedule((Callable)() -> { 

     for (int j = 1; j <= duration; j++) { 

      myTextArea.replaceRange("\n" + String.valueOf(j), myTextArea.getText().lastIndexOf("\n"), myTextArea.getText().length()); 

      try { 
       Thread.sleep(1000); 
      } catch (Exception e) { 
       JOptionPane.showMessageDialog(null, "Timer error!"); 
      } 
     } 
     return "Called!"; 

    }, 2, TimeUnit.SECONDS); 

    scheduledExecutorService.shutdown(); 
+0

В чем вопрос? У вас есть специфическая проблема? –

+0

Если я правильно понимаю, вы хотите, чтобы ставка получила значение по умолчанию, если пользователь не вводил значение через определенное количество времени? –

+0

@ Ioannis Stefanou да. – Beckham

ответ

1

На самом деле, есть хороший подход здесь closing-joptionpane-ShowInternalOptionDialog-programmatically

Модификация для вашего случая конкретно:

import javax.swing.JOptionPane; 

public class Example { 
    static String bet = ""; 
    public static void main(String[] args) { 
     final JOptionPane pane = new JOptionPane(); 

     Thread t1 = new Thread(new Runnable() { 
      public void run() { 
       try { 
        Thread.sleep(3000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       pane.getRootFrame().dispose(); 

      } 
     }); 
     t1.start(); 
     bet = pane.showInputDialog("give me a value"); 

     if(bet == null) 
      bet = "30"; 


     System.out.println(bet); 
     System.exit(0); 
    } 
} 

Если пользователь не дает вклада, JOptionPane делает String bet = null. Поэтому вы проверяете это, и если String - null, вы просто присваиваете ему свое значение.

Кроме того, как я уже сказал в комментариях, вы можете добиться того же с помощью Timer.

import javax.swing.JOptionPane; 
import javax.swing.Timer; 
import java.awt.event.ActionListener; 
import java.awt.event.*; 

public class StackOverFlow { 
    static String bet = ""; 
    public static void main(String[] args) { 
     final JOptionPane pane = new JOptionPane(); 

     Timer t = new Timer(3000, new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       pane.getRootFrame().dispose(); 
      } 
     }); 
     t.start(); 
     bet = pane.showInputDialog("give me a value"); 
     t.stop(); 

     if(bet == null) { 
      bet = "30"; 
     } 

     System.out.println(bet); 
    } 
} 

В обоих случаях достигается то же самое. Значение 30, очевидно, может быть задано объявленной константой.

Смежные вопросы