浏览器是否支持Java Applet的线程?

时间:2013-09-29 17:53:09

标签: java multithreading applet

我有一个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的线程。

1 个答案:

答案 0 :(得分:2)

JAVA Applet支持多线程。但是,请检查您的applet是特权还是沙盒。来自java applet documentation page

  

建议您使用Java网络启动协议(JNLP)启动小程序,以利用扩展的功能并改善用户体验。有关applet部署的分步说明,请参阅部署Applet。

使用JNLP启动时,沙箱小程序还可以执行以下操作:

  1. 他们可以在客户端上打开,阅读和保存文件。
  2. 他们可以访问共享的系统范围的剪贴板。
  3. 他们可以访问打印功能。
  4. 他们可以在客户端上存储数据,决定applet应该如何 已下载和缓存,等等。