1. 程式人生 > >在 JAVA 中播放聲音(1)

在 JAVA 中播放聲音(1)

我們可以採取簡潔的兩行程式碼實現在JAVA裡播放聲音,程式碼如下:
URL u1 = this.getClass().getClassLoader().getResource("mic/121.wav");      //相對src路徑,前面不要有 /
AudioClip co1 = JApplet.newAudioClip(u1); co1.loop(); 



現在你是不是覺得在 JAVA播放聲音就像在android 裡一樣美好了呢?但實際上AudioClip 的易用性遠不如 android 的播放類,這個操作會堅決的阻塞主執行緒。如果你現在是做一款遊戲,在播放背景音樂的時候,用AudioClip 你只能是想死的山脈了。


很容易的我們想到了執行緒:
public class PlayXt implements Runnable { URL u1 = this.getClass().getClassLoader().getResource("tank/121.wav"); AudioClip co1 = JApplet.newAudioClip(u1); public void run() {  co1.loop(); } } 

但是在這樣做之後,發現問題根本沒有解決,主執行緒還是被卡死,聲音卡頓,執行緒停滯……


於是我做了如下改進: public class PlayXt implements Runnable { URL u1 = this.getClass().getClassLoader().getResource("tank/121.wav"); AudioClip co1 = JApplet.newAudioClip(u1); public void run() { co1.loop(); try { Thread.sleep(51000); System.out.println("============================ggg"); } catch (InterruptedException e) { e.printStackTrace(); } } }
 


好了,現在就算長聲音的播放 也進乎完美。

你可以謝謝我了。

相關推薦

JAVA 播放聲音1

我們可以採取簡潔的兩行程式碼實現在JAVA裡播放聲音,程式碼如下: URL u1 = this.getClass().getClassLoader().getResource("mic/121.wav");      //相對src路徑,前面不要有 /AudioClip

Java的鎖1:同步、非同步、互斥、死鎖

主線:互斥鎖 ---> 死鎖 ---> 樂觀鎖與悲觀鎖 ---> 資料庫中的鎖(併發插入如何避免重複插入) 一、執行緒同步、非同步、互斥 1、執行緒同步:          是指多個執行緒通過特定的設定(如互斥量、事件物件、臨界區)來控制執行緒之間的執

python的JSON1

welcome 定義 ack () found 存儲 remember nbsp python程序 很多程序都要求用戶輸入某種信息, 例如: 讓用戶存儲遊戲首選項或提供要可視化的數據,程序把用戶的信息存儲在列表和字典等數據結構中, 用戶關閉程序時,我們幾乎總要保存他們提

Java測試工具使用1--Junit

所有 alt 命名 浪費 依然 之前 pan 時報 新建 在進行測試之前需要導入junit的兩個包,分別是   junit:4.12;hamcrest-core:1.1 1、基本測試標簽 [email protected]/* */@[email pr

JAVA POI 應用系列1--生成Excel

需要 void system 版本 stream 邊框 模式 格式 字體 POI簡介(官網:http://poi.apache.org/) Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程序對Microsoft Office

java面試題整理1

pmap 復制 java對象 試題 取出 樹形 年輕代和老年代 com 足夠 1、Equals與==的區別?   ==是判斷兩個變量或者實例是不是指向同一個內存地址   equals是判斷兩個變量或者實例所指向的內存地址中的值是不是相同 2、Object有哪些公用方法?  

java接口interface和虛基類abstract class的區別

private 特定 知識庫 價值 ceo 實現 相互 定義 協調 在Java語言中,abstract class和interface是支持抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的面向對象能力。abstract class和interface之

java的異常

數組 col logs exception 並且 test 但是 blog ring java異常的概念 執行期的錯誤(javac xxx.java) 運行期的錯誤(java xxx) 這裏講的是運行期出現的錯誤 class TestEx { public s

持有對象——Java的容器

接口 中移動 tex 結構 collect 成對 .get void 概念 泛型和類型安全的容器 使用Java SE5之前,編譯器允許向容器中插入不正確的類型,Java SE5引入泛型之後,應用預定義的泛型可以在編譯期防止將錯誤類型的對象放到容器中。 基本概念 Col

java算法----排序----1插入排序

pan 排序 string ack src [] AR style inf 1 package log; 2 3 public class Test4 { 4 5 /** 6 * java算法---插入排序 7 * 8

Java面試題—初級1

1.7 自動 多少 equals -a 創建 以及 cep 字節碼 1、一個".java"源文件中是否可以包括多個類(不是內部類)?有什麽限制? 可以有多個類,但只能有一個public的類,並且public的類名必須與文件名相一致。 2、Java有沒有g

Java易錯題1

輸出 col 順序執行 執行 AR new rgs oid hello 檢查程序,是否存在問題,如果存在指出問題所在,如果不存在,說明輸出結果。 public class HelloB extends HelloA { public HelloB() { } {

Java總結——常見Java集合實現細節1

except empty 找到 dex index shc reat int .net Java提高——常見Java集合實現細節(1) 2018年04月18日 15:07:35 閱讀數:25

java基礎問題鞏固1

大量 性能 PE 循環 垃圾 比較 通過 強制 ring 你對java垃圾回收了解嗎?什麽時候需要使用? 答: 垃圾回收器的作用是查找和回收(清理)無用的對象,從而讓jvm更 有效的使用內存。但是運行因為垃圾回收本身會有開銷,過於頻繁的使用會導致性能下降。比如有些程序在

大數據生態圈相關原理1

兩種 大數據 進行 排序 表示 數據塊 溢出 任務 傳輸數據 MapReduce 原理 客戶端任務到jobTracker, jobTracker分發任務到map和reduce。 map從datasplit 中獲取數據區,根據客戶端的相關業務邏輯生成(K,V)對,數據先緩存到

小李的Java學習之路1

第一天 java的面向物件思想 小葉:“為什麼要學習Java呢???” 小李:“因為Java比c語言有趣多了。。。。” 小葉:“你剛學完c語言,來說說c語言和Java的異同之處吧。” 小李:“c語言和Java的語法基礎,程式控制語句大體都是一樣的。主要是不同之處:Java和c的程

Java基礎之Freemarker1模板加載及清空機制

ron date java 自帶 pda 直接 onf 刷新方法 希望 一 freemarker加載模版機制 freemarker中的配置項template_update_delay表明模版的緩存時間,單位是s,超過緩存時間則從磁盤加載最新的模版,具體細節如下: 1)fre

Java EE入門教程系列——第一章Java EE的概述1

題外話:這個系列是為了記錄學習Java EE的軌跡,也算是讀書筆記,是我先看完了一遍教程對相關概念有了一個大體印象以後準備再重頭細看一遍時同步寫的部落格。感想就是其實以前課堂上老師教的課都是很有作用的,如果你能很好地掌握設計模式、計算機網路的相關知識,那麼對你理解Java EE會有很大的幫助。可能是

Java集合框架剖析1

一、Java集合  集合簡易架構圖: 1、集合是什麼?   儲存物件的容器,面嚮物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,儲存物件,集合是儲存物件最常用的一種方式。   集合中可以儲存任意型別的物件,而且長度可變。在程式中有可能無法預先知道需要多少個物件,那麼用

JAVA基礎面試題1

1、所有的類都繼承於Object類,其直接子類有Boolean 、void 、Character、Class、Compiler、Math、Number、Runtime、StringBuffer、StringBuilder、System、Thread等等;其常用的方法有:toString()、&nbs