일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Init-param #context-param #
- 자바 #웹자바 #webJava #java #코딩 #코딩초보 #ojdbc #서블릿 #자바서블릿 #javaServelet #servelet #httpServlet
- spring #스프링 #전자정부표준프레임워크 #표준프레임워크 #자바스프링 #스프링다운로드 #자바스크립트 #웹프로그래밍설정 #웹프로그래밍셋팅
- View #
- java #array #자바 #배열 #프로그래밍 #코딩 #자바프로그래밍
- 어노테이션 #@WebServlet #WebServlet #
- 8 실무에서 가장 많이 사용하는 SQL
- 서블릿선언 #서블릿선언방법 #
- cos.jar #cos드라이버 #파일업로드드라이버 #루피는귀여워 #마이바티스 #MyBatis #마이바티스sql #마이바티스DB #마이바티스jsp #마이바티스이클립스 #mapper #config.xml #마이바티스다운로드
- 자바웹프로그래밍
- Controller
- QUERY #DML #SQL문 #내림차순정렬 #오름차순정렬
- 서블릿 #자바모델1 #자바모델2 #mvc #mvc패턴
- 마이바티스환경설정
- 기말고사 #방통대기말고사 #방통대후기 #방통대기말고사후기 #방통대2023년1학기 #방통대1학기 #방통대C프로그래밍 #방통대장학금 #방통대영어회화1
- ORACLE #TIGER #SCOTT #SCOTT계정 #오라클학습계정 #프로그래밍 #SQL #SQLORACLE #오라클 #오라클연습 #오라클연습계정 #오라클연습문제 #WHERE절 #오라클조건절
- Doit #Doit오라클 #Doit시리즈 #연습문제
- 정처기3회 #정보처리기사2023
- 자바 #웹자바 #JAVA #WEB #WEBJAVA #WEBPROGRAMMING #웹 #웹프로그래밍 #코딩 #CODING #모델1 #모델2 #모델1방식 #모델2방식
- web.xml #배포지시자 #서블릿테스트
- sql #오라클 #불리언형 #boolean #webjava #java #jsp #Mybatis #마이바티스 #마이바티스환경설정 #모델1 #모델1프로그래밍 #Batis #마이바티스다운로드 #web설정 #웹프로그래밍 #게시판 #게시판제작 #게시판만
- html #자바와서블릿 #자바와웹연결 #웹연결
- union #sql99 #외부조인 #오라클조인 #sql조인 #자체조인 #비등가조인 #비등가조인 #테이블복사 #오라클테이블 #null인데이터출력
- 방통대 #방송통신대학교 #컴퓨터과학 #컴퓨터과학과 #컴과 #방통대컴퓨터과학과 #방통대컴과 #방통대파이썬 #방통대C #방통대자바
- 갤러리제작 #갤러리만들기 #jsp갤러리 #jsp게시판 #jsp프로그래밍 #jsp웹프로그래밍 #jsp웹 #jsp모델1방식 #사진업로드 #jsp사진업로드 #jdbc6 #jdbc드라이버다운 #jdbc드라이버무료다운
- Model #
- jsp #게시판만들기 #자바로게시판만들기 #웹테스트 #JNDI #myora #Oracle #오라클 #DAO #DTO #아파치톰캣 #웹자바셋팅 #모델1 #모델1방식 #모델1방식웹프로그래밍 #웹프로그래밍
- 정처기 #정처기필기 #정보처리기사 #정보처리기사필기 #정보처리기사2023 #정처기2023 #정처기3회 #정보처리기사3회 #정보처리기사실기 #정처기실기 정처기합격
- tern다운로드 #메이븐다운로드 #maven #스프링라이브러리 #자바라이브러리 #톰캣설정 #WAS #웹어플리케이션서버
- 정처기필기합격 #정처기합격후기
Archives
- Today
- Total
장미의 개발일기
자바로 음악재생 해보기 : 쓰레드 Thread (Daemon Thread) 본문
원래는 틱택톡 게임에 음악 넣어서 만든 후에, 포스팅 하려했는데 ㅠㅠ 오늘 못할 듯
우선 음악을 재생해주는 관련 드라이버가 필요하다.
아래꺼 다운해도 좋고, jlayer검색해서 딴거 받아도 될 듯
아래 코드에서 Player 클래스가 위의 드라이버에 있는거 ㅇㅇ 음악 재생하게 해주는 기능
복사해서 프로젝트안에 복붙해서 path 추가해주면 끝. 폴더 뒤질필요없고 이클립스 안에서 마우스 클릭 몇 번만 하면 됨.
여기서 포인트는 음악재생 스레드를 데몬스레드로 만들지 않으면,
UI에서 종료 버튼을 눌러도 음악이 종료가 되지 않는 다는 점이다. (2번 정지버튼은 제대로 작동)
그 상태에서 재실행 무한으로 하면 무한 돌림노래 감상 쌉가능 ~
2번째 코드에서 보면 총 스레드가 메인, 음악재생 2개다.
스레드는 각 독립적이라, 주스레드가 종료되더라도 다른 스레드는 계속 진행이 된다.
주스레드가 종료될 때 , 다른 스레드도 같이 종료되기를 원하면 스레드들을
데몬 스레드로 지정해주면 된다. 데몬스레드가 되면 주스레드에 종속이 된다.
(정확히는 그 프로세스의 다른 스레드가 다 종료되야 데몬스레드가 종료되는 것인데, 이 예제에선
메인, 음악재생 딱 2개만 있으니, 주스레드인 메인스레드가 종료될 때 음악재생스레드도 같이 종료되는 것)
package mp3_Ex;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.nio.Buffer;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
public class Mp3player {
private String mp3; //음악파일 경로
private Player player; // jlayer에서 가져온 플레이어 클래스의 객체
private int position; //위치값
public Mp3player(String mp3) {
this.mp3 = mp3;
} //생성자
public void play() {
BufferedInputStream bis = null;
try {
bis= new BufferedInputStream(new FileInputStream(mp3));
player = new Player(bis);
//플레이어 객체가 bis를 통해서 mp3파일을 바이트단위로 읽어와서 플레이
//음악 재생
} catch (Exception e) {
e.printStackTrace();
}
Thread t = new Thread() {
public void run(){
try {
// 플레이어 객체를통해 클래스 Play 메소드를 사용
player.play();
} catch (JavaLayerException e) {
// TODO Auto-generated catch block
e.printStackTrace(); //이걸 하면 오류남
System.out.println("재생이 안돼?");
//=> BufferedInputStream bis = null;
//버퍼 스트림 오류다
}
};
};
t.setDaemon(true); //이걸 안해주면 3종료를 눌러도 음악이 종료가 안됌
t.start();
} //play
public void close() {
if(player !=null) {
player.close();
}
}
}//class
메인이자 UI 코드
path에 자신이 재생할 음악파일 주소를 넣어주면 된다.
package mp3_Ex;
import java.util.Scanner;
public class MyPlayer {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//외부에서 입력된 값(키보드)이 곧 매개변수
String path = "C:\\Users\\ronan\\Desktop\\Ji\\음악관련소스\\Faceoff.mp3";
Mp3player mp = new Mp3player(path);
ext: while(true) {
System.out.println("menu 1: 플레이 2: 스탑 3: 종료");
int menu = Integer.parseInt(sc.nextLine());
switch (menu) {
case 1:
System.out.println("음악을 플레이");
mp.play();
break;
case 2:
System.out.println("음악을 정지");
mp.close();
break;
case 3:
System.out.println("종료");
break ext;
}
}
}
}
처음 테스트 해봤을 때 , 좀 신기했다.
'개발일기 > Java' 카테고리의 다른 글
자바로 Tic Tac Toe 틱택톡 게임 만들기 + 음악 넣기 (1) | 2023.05.08 |
---|---|
File IO Stream과 Buffered IO Stream 속도 비교 (0) | 2023.05.01 |
Java: IOStream : InputStream, OutputStream / 문자 Stream: Reader, Writer (0) | 2023.05.01 |
File class : 지정된 폴더의 파일 찾기, 없으면 생성하기 (0) | 2023.05.01 |
인터페이스 상속 : 예제 ( 중앙부서, 모형부서3) (0) | 2023.04.25 |