该Morning Class应该创建一个new Morning
,并且在每个公鸡的开头都会出现乌鸦。我的公鸡会鸣叫一次,等待五秒钟,然后再次鸣叫。然后5秒钟后,它会鸣叫两次,然后不停地鸣叫。我该怎么做才能做到这一点?我只想要它crow every 5 seconds
。如果将timer.restart()
放在ActionPerformed中,它什么也不做。有人可以指出或给我提示我做错了什么吗?任何帮助将非常感激。
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。不要重新声明它,这样您就可以初始化class字段而不是本地字段。
更改此:
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();