gpt4 book ai didi

java - 我怎么搞乱了我的 Java 计时器?

转载 作者:行者123 更新时间:2023-12-02 00:35:58 27 4
gpt4 key购买 nike

这个Morning Class应该创建一个新的早晨,并且在每个早晨开始时,公鸡都会打鸣。我的公鸡会叫一次,等五秒钟,然后再叫一次。然后五秒钟后它叫两次,然后就叫个不停。我可以做什么才能让它做到这一点?我只想让它每 5 秒鸣叫一次。如果我在 ActionPerformed 中放置一个 timer.restart() ,它不会执行任何操作。有人可以指出或给我提示我做错了什么吗?任何帮助将不胜感激。

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

public class Morning extends JFrame
implements ActionListener
{
private EasySound rooster;
public Timer timer;

public Morning()
{
super("Morning");

EasySound rooster = new EasySound("roost.wav");
rooster.play();

timer = new Timer(5000, this);
timer.start();

Container c = getContentPane();
c.setBackground(Color.WHITE);
//page 35
}

public void actionPerformed(ActionEvent e)
{
Morning morning = new Morning();
}


public static void main(String[] args)
{
Morning morning = new Morning();
morning.setSize(300, 150);
morning.setDefaultCloseOperation(EXIT_ON_CLOSE);
morning.setVisible(true);
}
}

最佳答案

您没有无限循环,而是无限递归(尽管速度较慢)。不要在这里递归——不要在 Timer 的 actionPerformed 中创建一个新的 Morning。相反,只需放入让乌鸦听到声音的方法即可。

下次,请将您的代码放在您的帖子中(就像我为您所做的那样)。不要让我们访问其他网站,因为如果您寻求免费帮助,您希望让其他人尽可能轻松地帮助您。

编辑
您还隐藏了 rooster 变量,将其声明两次,一次在类中声明为 null,一次在构造函数中声明为非 null。不要重新声明它,以便初始化类字段而不是本地字段。

更改此:

  public Morning()
{
super("Morning");

EasySound rooster = new EasySound("roost.wav"); // this creates a *local* variable only
rooster.play();

对此:

  public Morning()
{
super("Morning");

// EasySound rooster = new EasySound("roost.wav");
rooster = new EasySound("roost.wav");
rooster.play();

关于java - 我怎么搞乱了我的 Java 计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7807199/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com