我有一个Java Applet,它通过网页记录声音。 磁盘保存操作由内部类创建,该内部类是一个线程:
class saveThread extends Thread {
public void run() {
AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;
FileDialog fd = new FileDialog(new Frame(), "Save as WAVE", FileDialog.SAVE);
fd.setFile("*.wav");
fd.setVisible(true);
String name = fd.getDirectory() + fd.getFile();
File file = new File(name);
try {
byte audio[] = out.toByteArray();
InputStream input = new ByteArrayInputStream(audio);
final AudioFormat format = getFormat();
final AudioInputStream ais = new AudioInputStream(input, format, audio.length / format.getFrameSize());
AudioSystem.write(ais, fileType, file);
} catch (Exception e) {
e.printStackTrace();
}
}
}//End of inner class saveThread
问题是当我在网页中执行applet时,磁盘上的保存操作无效。但是当我直接执行applet时,它就像一个魅力,这就是为什么我认为问题可能是浏览器不支持applet的线程。
答案 0 :(得分:2)
JAVA Applet支持多线程。但是,请检查您的applet是特权还是沙盒。来自java applet documentation page
建议您使用Java网络启动协议(JNLP)启动小程序,以利用扩展的功能并改善用户体验。有关applet部署的分步说明,请参阅部署Applet。
使用JNLP启动时,沙箱小程序还可以执行以下操作: