【问题标题】:Java swing timer not delaying other commandsJava摇摆计时器不延迟其他命令
【发布时间】:2016-05-28 02:05:44
【问题描述】:

我对 java 很陌生(大约一年的自学)所以我有一个问题。

我正在制作一个扑克游戏,它实现了一个完整的 GUI 来配合它。我有一个用于所有输出的 JTextArea(有点像实时控制台输出)。我用过以下,

private void printer(String s, int delay){
    messageDelay = new Timer( delay, new ActionListener(){
          @Override
          public void actionPerformed( ActionEvent e ){
              dealerText.append("Dealer>> " + s + "\n");
          }
        } );
    messageDelay.setRepeats( false );
    messageDelay.start();
}

然后在这里调用方法,

private void runGame(){
    printer("Dealing Cards...", 2000);

    firstCard.setVisible(true);
    secondCard.setVisible(true);

我希望卡片在 2 秒延迟后显示,但它们会立即出现。我知道这里有问题我只是不知道如何解决它。提前致谢

【问题讨论】:

  • 您的setVisible(true) 调用应该在Timer 中的actionPerformed 方法中。
  • @JaroslawPawlak 我希望使用打印机作为延迟消息的通用方式,而不仅仅是一个实例
  • 只有actionPerformed方法里面的代码有延迟。在此方法中添加System.out.println,并在您调用setVisible 的位置旁边添加,然后查看它们何时打印。
  • 我知道@JaroslawPawlak,这就是为什么我要问如何延迟此消息然后继续运行命令。谢谢顺便说一句

标签: java swing


【解决方案1】:

使用Timer,你不能延迟主线程。延迟时间仅在actionPerformed 方法的代码块内起作用。

如果你想在firstCard.setVisible(true);代码行之前延迟你的主线程,你可以这样编码。

private void runGame(){
    printer("Dealing Cards...", 2000);

    Thread.sleep(nDelay);
    firstCard.setVisible(true);
    secondCard.setVisible(true);

或者你可以这样做。但是firstCardsecondCard 的可见性都会定期设置。如果您不在另一个代码行中更改它们的可见性,那没有意义,所以我会使用以前的解决方案。

private void printer(String s, int delay){
    messageDelay = new Timer( delay, new ActionListener(){
          @Override
          public void actionPerformed( ActionEvent e ){
              dealerText.append("Dealer>> " + s + "\n");

              firstCard.setVisible(true);
              secondCard.setVisible(true);
          }
        } );
    messageDelay.setRepeats( false );
    messageDelay.start();
}

【讨论】:

  • 前一种方法似乎使整个 GUI 冻结 nDelay 时间,而就第二种方法而言,我正在使用打印机方法在 gui 中进一步打印其他内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多