java 窗口怎么加背景音乐我已经写好窗口了

java 窗口怎么加背景音乐我已经写好窗口了,第1张

你好!很高兴为你解答。

首先,你打开这个登录窗口之后,你要求它能够播放音乐,你就在你启动的JFrame主线程main构造并显示完成JFrame后,新建一个方法叫做thisplayBgMusic();

这里解释一下,为什么叫你在启动JFrame主线程中调用这个方法而不是在你的QQLoinFrame的构造方法中调用,原因是Swing的处理机制原理是利用EventQueue来执行的,可以说,如果你直接new的话都是单线程(main)处理程序,这样的话就会对这个线程依赖过大,而这个线程也负荷过大。当你想启动播放音乐或者IO读写之类的耗时线程时,你可以试试在构造方法中执行这方法,你将会发现你的Swing程序没反应,要等某线程处理完后才可以继续显示。这里main线程阻塞,所以你的程序表面看起来不动,组件没反应,这就是因为阻塞掉了。解决这个问题的办法就是如下(这是其中一种,另一种你可以自行查找):

public static void main(String args[]) {

javaawtEventQueueinvokeLater(new Runnable() {

public void run() {

QQLogin qq = new QQLogin();

thisplayBgMusic();

}

});

}

正文

假设,你启动JFrame的主方法如下:

public static void main(String[] args) {

QQLogin qq = new QQLogin();

thisplayBgMusic();

}

thisplayBgMusic()方法

/

播放背景音乐,调用PlaySound线程类

/

public void playBgMusic() {

PlaySound play = new PlaySound();

Thread t = new Thread(play);

tstart();

}

PlaySound线程类

/

PlaySound线程类,其中,因为你要求不使用JMF,所以,请选择au或者wav格式吧

/

public class PlaySound implements Runnable{

public void run() {

try {

AudioClip audio;

URL url = null;

File musicFile = new File("msgwav");

URI uri = musicFiletoURI();

url = uritoURL();

audio = AppletnewAudioClip(url);

audioplay();

} catch (MalformedURLException ex) {

LoggergetLogger(PlayMsgSoundclassgetName())log(LevelSEVERE, null, ex);

}

}

}

播放音乐的代码  了解一下   可以直接加到小游戏里

package commusictest;

import javazoomjldecoderJavaLayerException;

import javazoomjlplayerPlayer;

import javaio;

public class Music {

private String music;

private Player player;

public  Music() throws FileNotFoundException, JavaLayerException {

FileInputStream file = new FileInputStream("e:/闹钟mp3");

BufferedInputStream name = new BufferedInputStream(file);

player = new Player(name);

playerplay();

}

public static void main(String[] args) throws FileNotFoundException, JavaLayerException{

new Music();

}

}

放音乐的api网上查有很多,比如javaxsoundmidi;

支持midi,mid背景音乐的播放

public class Music implements MetaEventListener, Runnable{

private Sequence sequence = null;

private Sequencer sequencer;

private boolean isPlaying = false;

private volatile Thread thread;

public Music(){

}

public Music(String midifile){

try {

loadMidi(midifile);

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} catch (InvalidMidiDataException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

//导入midi文件到内存中传给Sequence对象,相当与编码器

public void loadMidi(String filename) throws IOException, InvalidMidiDataException{

sequence = MidiSystemgetSequence(thisgetClass()getResourceAsStream(filename));

}

//播放方法

public void play(){

if(isPlaying){

return;

}

try {

sequencer = MidiSystemgetSequencer();

sequenceropen();

//用Sequencer对象把声音文件序列解码出来播放

sequencersetSequence(sequence);

sequenceraddMetaEventListener(this);

//设置循环次数,-1表示一直循环

sequencersetLoopCount(-1);

sequencersetLoopStartPoint(0);

sequencersetLoopEndPoint(sequencergetTickLength());

} catch (MidiUnavailableException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} catch (InvalidMidiDataException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

if(thread == null){

thread = new Thread(this);

threadstart();

}

}

public void stop(){

if(isPlaying){

sequencerstop();

isPlaying = false;

}

if(thread != null){

thread = null;

}

}

public void meta(MetaMessage meta) {

if(metagetType() == 47){

Systemoutprintln("Sequencer is done playing");

}

// TODO Auto-generated method stub

}

public void run() {

// TODO Auto-generated method stub

Thread current = ThreadcurrentThread();

while(current == thread && !isPlaying){

sequencerstart();

isPlaying = true;

try {

threadsleep(1001);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

}

//用起来也很方便

public static void main(String[] args){

Music music = new Music("amid");

musicplay();

}

}

如果这样写路径类要和音频文件放在一个目录下,如果你不想这样,有两种方法,一种是修改路径字符串,另一种是把ClassgetResourceAsStream方法改成new FileInputStream 这两个方法加载资源的初始路径不同,前者找class文件所在目录,后者找project目录

以上就是关于java 窗口怎么加背景音乐我已经写好窗口了全部的内容,包括:java 窗口怎么加背景音乐我已经写好窗口了、用Java编写了个小游戏想给游戏加上背景音乐用什么方法、我想把我的java小程序中嵌入一个背景音乐,写出添加背景音乐代码。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10130931.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存