#java #audio #java-8
#java #Аудио #java-8
Вопрос:
Я использую этот javaPlayer для воспроизведения моих звуков.
Но в моем более крупном проекте он замораживает / игнорирует почти все входные JFrame.EXIT_ON_CLOSE
и ActionListner
данные, которые изменяют содержимое фрейма. Я попытался устранить проблему в этом фрагменте.
btn.addActionListener(e -> System.out.println("Check1"));
Не применяется к моей кнопке. Только если я закомментирую все try/catch-block
"Check1"
, также достигается. В чем может быть проблема? Я уже пытался отправить playerpart с помощью Swing.invokeLater в другой поток.
package mainMVC;
import java.io.FileInputStream;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
public class Alone {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
JButton btn = new JButton("Test");
btn.addActionListener(e -> System.out.println("Check"));
frame.add(btn);
frame.pack();
try (FileInputStream fis = new FileInputStream("src/EgyptianTavernFullofGuitarists_1.mp3"))
{
Player player = new Player(fis);
player.play();
} catch (IOException | JavaLayerException e) {
e.printStackTrace();
}
btn.addActionListener(e -> System.out.println("Check1"));
}
}
Ответ №1:
Я не знаю, в чем проблема. Я протестировал ваш код в своей IDE, и он работает. Во время начального кадра воспроизводится музыка. ActionListener
возвращается Check
, и музыка не останавливается, то же самое EXIT_ON_CLOSE
.
Комментарии:
1. есть второй btn.addActionListener(e -> System.out.println(«Check1»));
2. дело в том, что кнопка
btn
должна возвращать значениеCheck
вместоCheck1
?3. просто закомментируйте весь блок try / catch, и он напечатает оба, потому что я добавляю два разных actionlisteners
4. хорошо, это верно, и почему вам нужны два
ActionListener
на одной кнопке. Я думаю, что это нормальное явление. Скажите мне точно, что здесь не так, потому что я не понимаю.5. пожалуйста, внимательно прочитайте мой вопрос и ответьте, что второй ActionListener предназначен только для тестирования
Ответ №2:
РЕДАКТИРОВАТЬ: я обнаружил, что выполнение остановлено до завершения воспроизведения файла.
Я справился с этим с помощью ручного создания потока. Теперь печатаются как «Check», так и «Check1».
File: Audio.java
package mainMVC;
import java.io.FileInputStream;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
class Audio extends Thread {
public void run(){
try (FileInputStream fis = new FileInputStream("src/EgyptianTavernFullofGuitarists_1.mp3"))
{
Player player = new Player(fis);
player.play();
} catch (IOException | JavaLayerException e) {
e.printStackTrace();
}
}
}
File: Alone.java
package mainMVC;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Alone {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
JButton btn = new JButton("Test");
btn.addActionListener(e -> System.out.println("Check"));
frame.add(btn);
frame.pack();
Audio myThread = new Audio();
myThread.start();
btn.addActionListener(e -> System.out.println("Check1"));
}
}