音频可以在静态嵌套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,但如果设计不当,有时会使您难以理解设计和更改。
Compelling reasons for using nested classes include the following:
- It is a way of logically grouping classes that are only used in one place
- It increases encapsulation
- 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 中,除非确实需要它。
所以我一直在尝试将此音频应用到我的主 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,但如果设计不当,有时会使您难以理解设计和更改。
Compelling reasons for using nested classes include the following:
- It is a way of logically grouping classes that are only used in one place
- It increases encapsulation
- 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 中,除非确实需要它。