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

Can audio be implemented in a static nested class?

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

我是否正确格式化了嵌套 class 并且可以嵌套音频?

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

如果您询问何时使用嵌套 class,那么答案是 根据您的要求和设计。您可以自由使用嵌套 class,但如果设计不当,有时会使您难以理解设计和更改。

我在引用 Oracle Official Document

Compelling reasons for using nested classes include the following:

  1. It is a way of logically grouping classes that are only used in one place
  2. It increases encapsulation
  3. It can lead to more readable and maintainable code

==已更新==

正如我提到的,对我来说,将 audio 作为内部 class 是没有意义的,但它又取决于你的 design/requirement,我也不确定 你为什么要在 inner class 中声明你的 main 方法 ?? 所以,我建议你

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

class audio extends Thread
{

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

您的设计应该简单且有意义。不要试图将所有东西都放在一个 class 中,除非确实需要它。