java - 浏览器支持 Java Applet 的线程吗?

标签 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

问题是当我在网页中执行小程序时,保存在磁盘上的操作不起作用。但是当我直接执行小程序时,它就像一个魅力,这就是为什么我认为问题可能是浏览器不支持小程序的线程。

最佳答案

JAVA Applet确实支持多线程。但是,请检查您的小程序是否处于特权状态或沙箱状态。来自 java applet documentation page

It is recommended that you launch your applet using Java Network Launch Protocol (JNLP) to leverage expanded capabilities and improve user experience. See Deploying an Applet for step by step instructions on applet deployment.

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

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

关于java - 浏览器支持 Java Applet 的线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19081310/

相关文章:

java - 修复ThreadPool内存泄漏

Java Applet 布局未按预期显示 o_O

.net - 在 .net 对象的终结器中调用 glDeleteTextures 的正确方法

Java 流 : put new element through existing stream

java - 在 JTextField 上单击或按 TAB 键时选择所有文本

java - Android-Studio 找不到导致 java.lang.NoClassDefFoundError 的类

java - 如果从 2 个线程写入 volatile 变量会怎样?

java - UnsatisfiedLinkError + JNLP + Applet + DLL

java - 如何在浏览器和 Java Web Start 小程序之间进行通信

java - 如何测试 private 方法,变量或者内部类