如何在嵌套类的内部类中构造和使用对象?

时间:2013-04-30 03:22:54

标签: java audio nested-class

我之前发布了这个,但它并不完全符合stackoverflow标准。我清理了代码并更多地阐述了我的问题,所以这里有:

我正在一个CS1项目的小程序中制作一个两人小行星游戏。我试图找出如何使用我可以在特定时间调用的方法来实现声音效果。我发现这个教程(http://www.dreamincode.net/forums/topic/14083-incredibly-easy-way-to-play-sounds/)就是这么做的,但我在嵌套循环语法方面遇到了一些麻烦。

如何从另一个类(在我的例子中,AsteroidsGame.java)中构造Sound类中的'Sound'对象?

由于教程代码的混乱,这是我的提高可读性。

//Import Statements
import java.applet.*;
import javax.swing.*;
import java.io.*;
import java.net.*;

public class Audioapp extends JApplet
{
public class Sound // Holds one audio file
{
    private AudioClip song; // Sound player
    private URL songPath;   // Sound path

    Sound(String filename)
    {
        try
        {
            songPath = new URL(getCodeBase(),filename); // Get the Sound URL
            song = Applet.newAudioClip(songPath); // Load the Sound
        }
        catch(Exception e){} // Satisfy the catch
    }

  //Loops audio file
  public void playSound()
  {
     song.loop();
  }


  //Stops audio file
  public void stopSound()
  {
     song.stop();
  }


  //Plays audio file once
  public void playSoundOnce()
  {
     song.play();
  }

} //Closes Sound()


  public void init()
  {
    Sound testsong = new Sound("song.mid");
    testsong.playSound();
  }

} //Closes Audioapp()

编辑1:刚刚记得最后一个帖子中有人建议我在编译/运行它时发布它的作用。这个.java自己什么都不做;但是当与我的项目的其余部分一起放置时,它确实编译时没有错误。

编辑2:非常感谢Zim-Zam的所有帮助,如果有人发现这个帖子并且遇到同样的问题,请查阅他的评论。

1 个答案:

答案 0 :(得分:1)

我建议您将内部类更改为public static class Sound - 这样您就可以构建类的实例而无需Audioapp的实例。

然后,要创建Sound的实例,您只需将其视为名称为Audioapp.Sound,例如Audioapp.Sound sound = new Audioapp.Sound()

如果内部类不是静态的,那么您将使用Audioapp.Sound sound = audioApp.new Sound(),其中audioappAudioapp的实例