【问题标题】:Can audio be implemented in a static nested class?音频可以在静态嵌套类中实现吗?
【发布时间】:2018-01-13 04:40:58
【问题描述】:

所以我一直在尝试将这个音频实现到我的主类中。我的主类包含其他方法,我不会包含这些方法,以防止我的帖子太长。我认为代码出错是因为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

【问题讨论】:

  • 这个问题似乎不清楚。预计作者首先进行了自己的研究,以便以集中、清晰的方式阐明问题。一个适当的问题不应该只是一个代码审查请求。

标签: java class audio static inner-classes


【解决方案1】:

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

我引用Oracle Official Document

使用嵌套类的令人信服的原因包括:

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

==更新==

正如我所提到的,对我来说,将 audio 作为内部类是没有意义的,但这又取决于你的设计/要求,我也不确定 你为什么要声明你的内部类中的 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 audio extends Thread
{

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

您的设计应该简单并且有意义。在真正需要之前,不要试图将所有内容都放在一个类中。

【讨论】:

  • 我认为我正确使用了嵌套类???但是当我运行程序时音频文件不会播放。
  • @Nicki IMO,没有。你需要把它拿出来。
  • 但是如果我把它拿出来并有一个类,我如何实现ImageObserver并将Thread扩展成一个类??
  • @Nicki 您没有在内部类(即外部类)中实现ImageObserver。不如直接拿出来看看??
  • 你告诉我不要使用嵌套类,这意味着我只有一个类。我的外部类需要 {ImageObserver},内部类需要 {extends Thread},所以如果我不使用嵌套类,如何将两者放在一个类中?我不能把它们都拿出来
猜你喜欢
  • 2013-08-20
  • 2014-08-30
  • 2016-01-15
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多