[자바] 팁 모음

자바 | 2010.01.05 20:04 | Posted by imesu-문경원
http://froginpot.tistory.com/51

[자바]배포판 만들기 및 exe 파일 만들기

자바 | 2009.08.03 17:11 | Posted by imesu-문경원

자바로 열심히 코딩을 했는데, 실행파일을 남에게 전달할때 어떻게 해야 되지???

모르겠다.

그래서 검색의 신 "구글"에게 물어보니 아주 좋은 블러그가 검색됐다.


1번째는, 자바 jar 배포판 만드는 방식이다. 


http://blog.naver.com/zx1018/10048477014

여기서 주의할 점은 "빵집"으로 jar 압축을 풀 수 있기는 한데 , jar 로 압축 할수는 없다. ㅠㅠ

알집을 써서 해봐야 겠다.

그래도 안되면 검색해 봐야지 ^^



2번째는 exe 파일 만드는 방법니다.


http://blog.naver.com/zx1018/10048477014



잘 써먹어야지 ^^

[자바] 배열 복사하기

자바 | 2009.06.14 18:08 | Posted by imesu-문경원

▣ 기본 데이터 타입을 이용한 배열 클래스의 예
◈ byte[]
◈ int[]
◈ long[]
◈ float[]
◈ double[]
◈ char[]

▣ 클래스를 이용한 배열 클래스의 예
◈ String[]
◈ Image[]

기본 데이터 타입뿐만 아니라 클래스에도 브래킷([])를 붙여서 새로운 배열 데이터 타입을 만들 수 있습니다. 결론적으로 배열 데이터 타입은 브래킷([])이 붙은 새로운 형태의 클래스입니다. 배열 데이터 타입을 아예 배열 클래스라고 부르겠습니다. 배열 클래스는 new를 이용해서 객체를 생성하며, 배열의 개수를 지정하기 위해서 브래킷([]) 안에 첨자를 사용합니다.

--------------------- 배열 복사 ----------------------------------------

public class ArrayTest {
        int arr[] = new int[10];
    int[] source  = new int[]{5, 4, 6, 9, 7, 9};
    int[] target = {100, 200, 300, 400, 500, 600,700};
   
    public void arrayCopy1()
    {
        // System.arraycopy(); 를 이용한 선택 부분 복사
        // source의 2번째(0,1,2번째) 요소부터 4개가 복사
        // target에서는 3번째(0,1,2,3번째) 자리에 복사
            System.arraycopy(source, 2, target, 3, 4);
            for(int i=0; i<target.length; i++) {
                System.out.println("target["+i+"]:" + target[i]);
            }
            System.out.println();
                int[] source  = new int[]{5, 4, 6, 9, 7, 9};
                //clone()을 이용한 메모리 모두 복사
                int[] target = (int[])source.clone(); // 다운 캐스팅    
       for(int i=0; i<target.length; i++){
            System.out.println("target["+i+"] : " + target[i]);
        }
    }

        public static void main(String[] arr)
        {
                ArrayTest at = new ArrayTest();
                at.arrayCopy1();
        }
}


--------------------- 객체 배열 ----------------------------------------

public class ArrayTest {
    private String name;
    private String kind;
   
    public ArrayTest(String name, String kind) {
        this.name = name;
        this.kind = kind;
    }
    public String toString() {
        return this.kind + ":" + this.name;
    }
        public static void main(String[] arr)
        {
        //1. 객체배열의 생성
        ArrayTest[] dog = new ArrayTest[5];
        for(int i=0; i<dog.length; i++)    
        {
            System.out.println("Dog[" + i + "] : " + dog[i]);
        }
       
        //2. 객체배열의 참조변수에 메모리할당
        dog[0] = new ArrayTest("쫑쫑이","불독");
        dog[1] = new ArrayTest("워리","똥개");
        dog[2] = new ArrayTest("개똥이","진도개");
        dog[3] = new ArrayTest("발리","푸들");
        dog[4] = new ArrayTest("투덜이","잡종");        
        for(int i=0; i<dog.length; i++)
        {
                System.out.println("Dog[" + i + "] : " + dog[i]);
        }
        }
}
/*
Dog[0] : null
Dog[1] : null
Dog[2] : null
Dog[3] : null
Dog[4] : null
Dog[0] : 불독:쫑쫑이
Dog[1] : 똥개:워리
Dog[2] : 진도개:개똥이
Dog[3] : 푸들:발리
Dog[4] : 잡종:투덜이
*/

참고 : 소설같은 자바 ||
<츨처> http://develop.sunshiny.co.kr/115

[Java]byte(1byte)단위로 읽기, char(2byte) 단위로 읽기

자바 | 2009.06.14 15:08 | Posted by imesu-문경원

C언어에선 char가 1byte 인데, 자바에서는 2byte단위로 사용된다.

그럼 자바에서 사용하는 1byte 자료형은 무엇이 있을까??

바로 byte 이다.

byte 단위로 입력을 받는 함수와 , char 단위로 읽어오는 매소드는 다른데 검색 능력이 미비한 관계로 한참 검색하다 방법을 발견해다.

   Byte 단위 (1byte)  Char 단위 (2 byte)
 읽기  InputStream  Reader
 쓰기  OutputStream  Writer



ㅁ InputStream 의 메소드 두개만 알자

  int read() : 한 바이트씩 읽는다 (리턴형 int 는 데이터다..).. 느리지.. 느려..

  int read(byte[] b) : 한번에 왕창 읽는다 (데이터가 byte[] 배열에 저장. 리턴형 int 는 카운터다..)

 

ㅁ OutputStream 의 메소드

  void write(byte[] b) : b 바가지로 퍼다가 한번에 처리한다

  void write(byte[] b, int off, int len) : byte[] 배열에 저장, off 는 시작위치 어디부터, len 은 몇개

  void write(int b)


1. 웹에서 파일 읽어서 복사








2. 그냥 파일 읽고 복사하기





3. 파일 경로나 파일 검색 프로그램 기초 코딩




 
<출처> http://blog.naver.com/axl84rose/50030682097



일요일 오후 낮잠 한숨 자고 일어나서 뭔가 해야 될거 같아서 컴 앞에 앉았다.

sk 와이번즈는 두산과의 3연전은 3연패로 마감하고 1등은 두산에 내어주었다. ㅠㅠ

네이버에서 실시간 보다가 짜증나서 그동한 jezzFlash에서 해결하지 못했던 문제를 해결하기로 마음 먹었다.


jezzFlash 를 개발하면서  발생한 몇가지 문제가 있었다.
첫 번째는, 읽고 쓰기 위해 생성한 쓰레드(Read/ Wirte)가 메인 프로그램이 죽어도 남아서 계속 존재하는 문제가 발생했다.
두 번째는, jezzSerial에서 읽어온 데이터를 jezzSerial을 상속받는 Protocol 에서 처리하기가 여간 곤란하다는 것이다.

첫번째 문제는, 영민이가 확인해 본결과 블럭되는 문제때문에 발생하는거 같다고 해서 소스코드에서 약간 수정을 했다.

먼저 쓰레드를 죽이고난후 시리얼 파일 디스크립터를 닫으니 정상적으로 쓰레가 종료 되었다. dieComThread() 에 구현하였다.

두번째 문제는 jezzSeial에서 데이터 읽어 오는 부분에 대한 메소드를 parcingRxData()를 만들었다.


protocol에서는 parcingRxData()을 재정의해서 사용하면 된다.

예를 들어 아래처럼 사용하면 된다.




<첨부파일>



C언어로 주로 개발하다보니 자바로 프로그래밍하면서도 C언어 같은 디버깅 방법을 찾게 된다.

C로 개발할때 내가 자주 사용하는 __LINE__  , __FUNCTION__ , __FILE__ 를 이용하여 디버깅용 printf() 함수를 만들어 사용했는데 아주 편하기 그지 없었다. ^^

자바에서도 요런게 없을까  찾아보았다.


  c언어 매크로  자바
 라인 출력  __LINE__  new Throwable().getStackTrace()[0].getLineNumber()
 함수 출력 / 클래스 출력  __FUCTION__  this.getClass().getName()
     


요런 것들이 있으니 사용해 보자!!

아래는 클래스 출력 샘플이다. ^^


[Java] Thread

자바 | 2009.05.10 01:23 | Posted by imesu-문경원

자바 쓰레드 메쏘드를 살펴 보니, 요넘을 생성하는 건 있는데 , 강제로 종료하는 매소드는 전부  Deprecated. 라는 경고가 있다.

그럼 어떻게 해야 하지?

"열혈강의 JAVA Programming" 을 보니 Thread의 종류는 크게 두가지가 있다고 언급되어있다.

1. 독립 쓰레드
main에서 생성된 thread 이지만 main이 죽어도 생성된 thread는 계속 살아있다.

2. 데몬 쓰레드
main이 죽으면 생성된  thread가  같이 죽는것이다. thread 를 start 하기전에 Daemon(true); 로 해주면 데몬 thread 가 된다.



Q1:두개를 구별하는 방법은 setDeamon() 메소드를 이용해서 설정하는 것인데 , 궁금한 점이 있다.
     만약 setDeamon()메소드를 호출하지 않으면 디폴트로 어떤 쓰레드가 생성되는 걸까?

A1: 독립쓰레드가 된다. 즉 main이 죽으면 같이 죽는다.





[Autopacage] 2009년 5월 6일 첫삽(?) 뜨다.

자바 | 2009.05.06 16:28 | Posted by imesu-문경원
임베디드 보드의 시리언 콘솔은 다양한 역할을 한다.

특히나 디버깅에 상당히 요긴한데, 시리얼 케이블과 몇가지 시리얼 통신 설정만 하여 간단히 디버깅할 수 있다.

그런데 Falinux의 Autopacage이라는 프로그램을 보면 생산을 위한 용도로 사용되고 있다.

예전에도 한번 만들어 볼 생각을 하다가 중도에 그만 두곤 했는데

이벤에 자바SWT를 하면서 다시 진행해 보려는 생각이 문뜩 들었다.

그래서 개발일지를 차근 차근 써 볼까 한다.

현재 대략적은 화면 구성은 마쳤고, 우선을 동일하게 만들었다.



시리얼 콘솔을 이용해서 메시지를 내가 만든 Autopacage에 화면에 뿌리는 일을 진행 중이다.

시리얼 관련 부분은 유영창 선배님이 남든 소스를 가져가다 쓰고 있다. ^^

현재는 [open port] 버튼을 누르면 유영창 선배님이 만든 시리얼 창이 나온다.

시리얼 포트를 열고 장비와 연결하니까.

커널 어떤 메시지가 나온다. 굿~

그런데 화면에 깨져서 나온다. 여기에 대한 보정인 나중에 하고

우선 오늘은 오늘 까지 디버깅 메시지 [Terminal]를 화면에 뿌릴 수 있게 해야지 ~~^^

고고~

[SWT/JFace]범용 리스너 만들기

자바/SWT / JFace | 2009.05.05 16:14 | Posted by imesu-문경원


이전 예제에서 마우스 움직임에 대한 처리를 하기 위해서 MouseTrackListener를 사용하고,
버튼을 눌려 선택하기를 위해서 SelectionListener를 사용했다.

타입이 정해져 있는 이벤트의 경우, 해당 타입이 있는 리스너를 개별적으로 호출하여 사용해야 하는데

내가 원하는 이벤트 타입을 모아서 새로운 타입의 이벤트 리스너를 만드는 방법이 없을까? 궁금했었다.

역시 자바는 실망을 시키지 않았다. handleEvent()를 이용하면 위젯에서 어떤 이벤트가 발생하더라도 처리할 수 있다. ^^



구현 방법


1) 리스너를 만든다. 이때 반드시 handleEvent() 매소드를 재정의한다.  handleEvent() 메소드 내부네 swtich...case문을 이용하여 원하는 처리하고자 하는 이벤트를 추가한다.



2) 컨드롤에 리스너를 등록한다.


글의 마지막 샘플 코드를 보면 이곳에 3가지 이벤트를 추가한 샘플을 볼 수 있다.

    • SWT.MouseEnter
    • SWT.MouseExit
    • SWT.Selection

 
실행 결과  


1) 처음 화면입니다. 버튼을 두개 만듭니다.



2) 왼족 버튼에 마우스 포인터를 이동하여 들어가면 handleEvent() 에서 SWT.MouseEnter의 case문이 호출된다.


3) 왼족 버튼에 마우스 포인터가 빠져 나가면  handleEvent() 에서 SWT.MouseExit의 case문이 호출된다.



4) 오른족 버튼에 마우스 포인터를 이동하여 들어가면 handleEvent() 에서 SWT.MouseEnter의 case문이 호출된다.


5) 오른족 버튼에 마우스 포인터가 빠져 나가면  handleEvent() 에서 SWT.MouseExit의 case문이 호출된다.



6) 왼족 버튼에 마우스 오른쪽 버튼을 클릭하면  handleEvent() 에서 SWT.Selection의 case문이 호출된다.





소스코드 보기


[SWT/JFace]1개 버튼에 2개 리스너 등록하기

자바/SWT / JFace | 2009.05.05 15:02 | Posted by imesu-문경원

아래 예제는 한개의 버튼에 대해서 두개의 리스너를 등록한 방법에 대한 예제이다.

아래 그림 "예" 버튼에 두개의 리스너를 등록했다.
첫번째, 마우스가 움직임에 대한 리스너(MouseTrackListener)
두번째, 버튼을 눌려 선택에 대한 리스너(SelectionListener)

버튼(컨트롤) 에 이벤트 리스너를 등록하는 방법은 아주 간단하다.

내가 사용고자 하는 컨트롤에 addXXXListener() 가 있으면 된다.
아래 소스의 경우, 내가 사용하고자 하는 버튼에 리스너
addMouseTrackListener ,
addSelectionListener
를 추가했다.







1. 실행 결과 


1) "예", "아니오" 버튼이 나온다.



2) 마우스를 "예" 버튼에 옮기면 MouseTrackListener 의 매소드 mouseEnter() 가 호출된다.


3) 마우스를 "예" 버튼에 계속 있음면  MouseTrackListener 의 매소드 mouseHover() 가 호출된다.


4) 마우스를 "예" 버튼에서 빠져 나오면   MouseTrackListener 의 매소드 mouseExit() 가 호출된다.



2. 전체 소스 보기



 

티스토리 툴바