Я создаю веб-приложение, в котором запись выполняется с помощью апплета. Когда я запускаю свою программу на просмотрщике апплета с помощью eclipse, он записывает мой голос и сохраняет его на моем компьютере, но когда я запускаю то же самое с помощью html-файла в браузере, он открывает апплет, но не записывает мой голос.Как записать голос в браузере с помощью апплета в java
Даже я подписал файл проекта jar, но это не имело никакого значения. Это всегда вызывает исключение, подобное этому java.security.AccessControlException: доступ запрещен (javax.sound.sampled.AudioPermission record).
Вот пример кода:
public class AudioRecorder extends JApplet {
private static final long serialVersionUID = 1L;
AudioFormat audioFormat;
TargetDataLine targetDataLine;
final JButton captureBtn = new JButton("Capture");
final JButton stopBtn = new JButton("Stop");
final JPanel btnPanel = new JPanel();
AudioFileFormat.Type[] fileTypes;
@Override
public void init() {
// TODO Auto-generated method stub
super.init();
new AudioRecorder();
}
public AudioRecorder() {
captureBtn.setEnabled(true);
stopBtn.setEnabled(false);
captureBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
captureBtn.setEnabled(false);
stopBtn.setEnabled(true);
captureAudio();
}
}
);
stopBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
captureBtn.setEnabled(true);
stopBtn.setEnabled(false);
stopAudio();
}
}
);
getContentPane().add(captureBtn);
getContentPane().add(stopBtn);
getContentPane().setLayout(new FlowLayout());
setSize(300, 120);
setVisible(true);
}
private void captureAudio() {
try {
audioFormat = getAudioFormat();
DataLine.Info dataLineInfo = new DataLine.Info(
TargetDataLine.class, audioFormat);
targetDataLine = (TargetDataLine) AudioSystem.getLine(dataLineInfo);
new CaptureThread().start();
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
}
private void stopAudio() {
targetDataLine.stop();
targetDataLine.close();
}
private AudioFormat getAudioFormat() {
float sampleRate = 8000.0F;
// 8000,11025,16000,22050,44100
int sampleSizeInBits = 16;
// 8,16
int channels = 1;
// 1,2
boolean signed = true;
// true,false
boolean bigEndian = false;
// true,false
return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed,
bigEndian);
}
class CaptureThread extends Thread {
public void run() {
AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;
File audioFile = new File("audio." + fileType.getExtension());
try {
targetDataLine.open(audioFormat);
targetDataLine.start();
AudioSystem.write(new AudioInputStream(targetDataLine),
fileType, audioFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Вот HTML коде страницы:
<HTML>
<HEAD>
</HEAD>
<BODY>
<div>
<APPLET CODE="AudioRecorder.class" WIDTH="800" HEIGHT="500">
<param name="permissions" value="sandbox">
</APPLET>
</div>
</BODY>
</HTML>
Пожалуйста, помогите мне, где актуальна проблема. Заранее спасибо.
Нужно указать, где ваш апплет должен сохранять файлы? Вы создали этот каталог? Является ли он доступным для записи?Я замечаю, что ваш HTML говорит, что он использует изолированные разрешения, может ли это быть возможной причиной? Я не программист на Java, но всегда есть некоторые сходства в том, как все происходит, скажем, на серверах. – Kinnectus
Возможный дубликат [Security Exception в самописном звукозаписывающем устройстве Applet] (http://stackoverflow.com/questions/7709377/security-exception-in-self-signed-sound-recorder-applet) –
* «Даже я подписал мой файл проекта jar .. "* Не так много смысла в том, что HTML не использует файл Jar, а файл класса free (не в Jar). –