我无法弄清楚如何调用此类并使其执行。我正在调用其他类的方法来制作菜单,将其作为墨西哥课程的不同相关任务,但我无法弄清楚如何让它显示这个类。 在不同的情况下,每个都调用一个执行它的方法。我想为我发布的第二个节目做这个。我想让它执行程序,以便它可以播放它的歌曲
主要类别:
import javax.swing.JOptionPane;
public class MexicoProject
{
public static void main(String[] args)
{
String[] choice = {"History", "Trivia", "Intro", "Anthem", "Quit"};
String Menu;
do
{
Menu = (String)JOptionPane.showInputDialog(null, "Welcome, this program will teach you about the history of Mexico.\nPick one of the options below.",
"Mexico History", JOptionPane.QUESTION_MESSAGE, null, choice, choice[0]);
if (Menu == null)
JOptionPane.showMessageDialog(null, "Pick something!");
else
{
switch (Menu)
{
case "History":
MexicoHistory.History();
break;
case "Trivia":
Quiz();
break;
case "Intro":
FrenchIntro.Intro();
break;
case "Anthem":
{
break;
}
break;
case "Quit":
JOptionPane.showMessageDialog(null, "Goodbye!");
break;
default:
JOptionPane.showMessageDialog(null, "Something went wrong! Try again!");
}
}
} while (Menu != "Quit");
}
被调用的类:
import java.awt.event.*;
import java.io.*;
import javax.sound.sampled.*;
public class Song extends JFrame
{
AudioFormat audioFormat;
AudioInputStream audioInputStream;
SourceDataLine sourceDataLine;
boolean stopPlayback = false;
final JButton stopBtn = new JButton("Stop");
final JButton playBtn = new JButton("Play");
final JTextField textField = new JTextField("MexicanNationalAnthem.wav");
public static void main(String args[])
{
new Song();
}//end main
//-------------------------------------------//
public Song() //constructor
{
stopBtn.setEnabled(false);
playBtn.setEnabled(true);
//Instantiate and register action listeners
// on the Play and Stop buttons.
playBtn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
stopBtn.setEnabled(true);
playBtn.setEnabled(false);
playAudio();//Play the file
}//end actionPerformed
}//end ActionListener
);//end addActionListener()
stopBtn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//Terminate playback before EOF
stopPlayback = true;
}//end actionPerformed
}//end ActionListener
);//end addActionListener()
getContentPane().add(playBtn,"West");
getContentPane().add(stopBtn,"East");
getContentPane().add(textField,"North");
setTitle("Himno Nacional Mexicano");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(250,70);
setVisible(true);
}//end constructor
//-------------------------------------------//
//This method plays back audio data from an
// audio file whose name is specified in the
// text field.
public void playAudio()
{
try
{
File soundFile = new File(textField.getText());
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
audioFormat = audioInputStream.getFormat();
System.out.println(audioFormat);
DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class,audioFormat);
sourceDataLine =(SourceDataLine)AudioSystem.getLine(dataLineInfo);
//Create a thread to play back the data and
// start it running. It will run until the
// end of file, or the Stop button is
// clicked, whichever occurs first.
// Because of the data buffers involved,
// there will normally be a delay between
// the click on the Stop button and the
// actual termination of playback.
new PlayThread().start();//call the PlayThread class
}
catch (Exception e)
{
e.printStackTrace();
System.exit(0);
}//end catch
}//end playAudio
//=============================================//
//Inner class to play back the data from the
// audio file.
class PlayThread extends Thread
{
byte tempBuffer[] = new byte[10000];
public void run()
{
try
{
sourceDataLine.open(audioFormat);
sourceDataLine.start();
int cnt;
//Keep looping until the input read method
// returns -1 for empty stream or the
// user clicks the Stop button causing
// stopPlayback to switch from false to
// true.
while((cnt = audioInputStream.read(tempBuffer,0,tempBuffer.length)) != -1&& stopPlayback == false)
{
if(cnt > 0)
{
//Write data to the internal buffer of
// the data line where it will be
// delivered to the speaker.
sourceDataLine.write(tempBuffer, 0, cnt);
}//end if
}//end while
//Block and wait for internal buffer of the
// data line to empty.
sourceDataLine.drain();
sourceDataLine.close();
//Prepare to playback another file
stopBtn.setEnabled(false);
playBtn.setEnabled(true);
stopPlayback = false;
}
catch (Exception e)
{
e.printStackTrace();
System.exit(0);
}//end catch
}//end run
}//end inner class PlayThread
}//===================================//
答案 0 :(得分:0)
确保所有类都保留在同一个包中。
您可以通过为要调用的类创建对象来调用其他类的方法。
然后使用该对象调用方法名称..
classbeingcalled obj= new classbeingcalled();
obj.methodname();
或将您的方法声明为静态方法,以便您可以使用类名称
来调用该方法 public static returntype methodname(){
...
}
来自包中的任何类
classname.methodname();
PS:如果你对这个答案不满意或者期望这个答案,请明确你的问题。