错误的符号类型,代码uncompileable
问题描述:
import javax.sound.sampled.*;
import java.io.*;
import javax.swing.*;
class muse{
// this plays music files
Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread music, Throwable ex) {
System.out.println("Uncaught exception: " + ex);
}};
String dian="yun.wav";
static void mate(String dian)
{
Thread music = new Thread(dian)
{
public void run(String dian)
{
try
{
Clip clip= null;
File in = new File(dian);
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(in);
clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();
JOptionPane.showMessageDialog(null, "Click OK to stop music");
clip.drain();
}
catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex)
{
ex.printStackTrace();
}
throw new RuntimeException();
}
};
}
public static void main(String args[]) throws InterruptedException {
music.start();
}
}
我创造了这个代码,这样我就可以输入另一个java文件的歌曲文件名然而代码最终被不可编译即使是在NetBeans中没有红色的错误。 如果我删除静态无效的队友(字符串店){} 的代码工作正常,任何人可以帮助解释为什么它不编译或允许代码从另一个java文件错误的符号类型,代码uncompileable
答
的music
对象声明运行的替代在静态方法mate
中,在本地声明并且在主方法中不可访问。
尝试修改你的例子:
static Thread mate(String diane) {
return new Thread(dian){
...
}
,然后在你的主要方法
public static void main(String args[]) throws InterruptedException {
Thread music = mate("filename");
music.start();
}
答
编译失败可以在
public static void main(String args[]) throws InterruptedException {
mate(dian);
music.start();
}
因为音乐变量不发生在mai可访问的范围内定义N()。
易破解你可以制作线程音乐变量是一个私有静态变量,所以主要可以访问它。
private static String dian = "yun.wav";
private static Thread music = null;
static void mate(String dian){
music = new Thread(dian){...}
}
答
有多个错误或错误与您的代码:
1)音乐是不是主要方法可见,你可以声明为类变量是可见的
2)你逝去run()的一个参数(现在它不覆盖Thread类的方法),所以当你在音乐上调用start()时,它不会执行任何操作,因为它会调用Thread类的Run方法。这就是为什么你需要删除传递给run()的String参数。
3)你是硬编码的文件名。你可以把它作为命令行的输入。
class muse{
//music will be available to main method
private static Thread music ;
// this plays music files
Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread music, Throwable ex) {
System.out.println("Uncaught exception: " + ex);
}
};
static void mate(String dian){
music = new Thread(dian){
//removed argument so it can run when you call start();
@Override
public void run(){
try{
Clip clip= null;
File in = new File(dian);
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(in);
clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();
JOptionPane.showMessageDialog(null, "Click OK to stop music");
clip.drain();
} catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex) {
ex.printStackTrace();
}
throw new RuntimeException();
}
};
}
public static void main(String args[]) throws InterruptedException {
String dian=null;
//you can take dian as inut file from command line also using scanner
Scanner s=new Scanner(System.in);
dian=s.next();
s.close();
////////////
//call Mate() so it will create a new new music thread with clip assigned to dian;
mate(dian);
//start music
music.start();
}
}
请发布您在编译时收到的完整错误。另外,请尝试重新格式化您发布的代码以包含缩进。 – Eric
*但是,即使netbeans中没有红色错误,代码最终仍然是不可编译的。*这是什么意思? – shmosel