音频可以在静态嵌套类中实现吗?

时间:2018-01-13 04:40:58

标签: java class audio static inner-classes

所以我一直在尝试将这个音频实现到我的主类中。我的主类包含其他方法,我不会包括这些方法以防止我的帖子太长。我认为代码因out.audio audio = new out.audio ();而出错,因为我要么把它放在错误的方法中,要么我没有使用正确的变量。我仍然是一个初学者编码器,所以我已经对我的代码中发生的事情感到困惑。我所知道的是,只运行音频类(不是嵌套)是有效的。

我是否正确格式化了嵌套类,是否可以嵌套音频?

import java.awt.*;
import hsa.Console;
import java.awt.image.*;
import java.util.Random;
import sun.audio.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
class out implements ImageObserver
{
//lots of code and other methods here so I'm going to leave it out
public static class audio extends Thread
{
    out.audio audio = new out.audio ();
    public void run ()
    {
        while (true)
        {
            AudioPlayer MGP = AudioPlayer.player;
            AudioStream BGM;
            AudioData MD;

            ContinuousAudioDataStream loop = null;

            try
            {
                InputStream test = new FileInputStream ("Music long.au");
                BGM = new AudioStream (test);
                AudioPlayer.player.start (BGM);
                //MD = BGM.getData();
                //loop = new ContinuousAudioDataStream(MD);

            }
            catch (FileNotFoundException e)
            {
                System.out.print (e.toString ());
            }
            catch (IOException error)
            {
                System.out.print (error.toString ());
            }
            MGP.start (loop);
            try
            {
                Thread.sleep (200000);
            }
            catch (InterruptedException ie)
            {
            }
            try
            {
                Thread.sleep (1500);
            }
            catch (InterruptedException ie)
            {
            }
        }
    }
    public static void main (String[] args)
    {
        c = new Console ();
        audio t1 = new audio ();
        t1.start ();
        for (;;)
        {
            c.println ("");
            break;
        }

    } // main method
} // audio class
} //out class

1 个答案:

答案 0 :(得分:0)

如果您要问何时使用嵌套类,请根据您的要求和设计 回答 。您可以自由使用嵌套类,但有时它会让您难以理解设计和更改它,如果它没有正确完成。

我在引用Oracle Official Document

  

使用嵌套类的令人信服的理由包括:

     
      
  1. 这是一种逻辑分组仅在一个地方使用的类的方法
  2.   
  3. 增加封装
  4.   
  5. 它可以带来更易读和可维护的代码
  6.   

<强> ==更新==

正如我所提到的,对我而言,将audio作为内部类是没有意义的,但是再次达到你的设计/要求,我也不确定 为什么你在内部类中声明了你的主要方法?? 所以,我建议你

class out
{
    public static void main (String[] args)
    {
     //lots of code
    }
}

class ImageImp implements ImageObserver
{
//lots of code and other methods here so I'm going to leave it out

}

然后你应该拿出内部课

class audio extends Thread
{

    public void run ()
    {
        //code here
    }
}

你的设计应该简单,应该有所帮助。在真正需要之前,不要试图将所有内容放在一个类中。