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

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()
     


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

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


[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. 전체 소스 보기




1. 과정



1)  윈도우의 '닫기' 버튼을 누를때 발생하는 이벤트를 처리하기 위해서 리스너를 생성한다.  
여기선 ShellListener 를 생성하였다. 



2) 리스너를 사용했기 때문에, 반드시 해당 리스너(ShellListener)에 속해있는 모든 매서드를 재정의 해야한다.


3. addXXXListenerr에 등록한다. 우리가 사용할 매소드는 shell.addShellListener(shellListener) 이다.




2. 실행결과




1. 닫기 버튼을 누른다.


2. 메시지 박스가 나온다.



3. 전체 소스 보기

[SWT/JFace] 시간 함수

자바/SWT / JFace | 2009.04.29 23:58 | Posted by imesu-문경원


   SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");    // yyy MM ...등은 이대로 써야한다.
   Date d = new Date();

   String str = format.format(d);    
   System.out.println("현재시간: " + str);    // 현재시간 표시

아래 샘플의 목적은 특정 파일을 읽어 들인 후에 내용을 화면에 뿌리기 위한 목적으로 만든 샘플이다.

1. 실행 결과




1)기본 화면이 뜬다.

2) 파일 열기 버튼을 누르면 아래의 탐색기가 나온다.


3) "file_read.java" 파일을 열어서, 내용을 화면에 표시한다.



2. 소스 분석




 

[자바]이클립스 강좌링크

자바 | 2009.04.26 22:33 | Posted by imesu-문경원

23 [이클립스]  Eclipse용 Ajax Toolkit Framework (한글)
22 [이클립스]  eclipse에 SQLExplorer 추가하기
21 [이클립스]  Eclipse에서 Ruby사용하기.
20 [이클립스]  eclipse 사용시 JSP의 컴파일 경로
19 [이클립스]  JSP 개발환경 구축 이클립스 3.2 + WTP 1.5 + 톰캣 5.5.17
18 [이클립스]  이클립스 3.2 & 한글언어팩 다운로드
17 [이클립스]  Ant 에서 사용하는 xml 정리
16 [이클립스]  Eclipse 에서 유저 코딩 규칙 설정중..
15 [이클립스]  SQL Explorer 사용하기
14 [이클립스]  Eclipse에서 Flex와 PHP로 작업하기
13 [이클립스]   Eclipse 웹 관련 설정
12 [이클립스]  자동 war 풀기
11 [이클립스]  이클립스 디버깅 방법과 자주사용되는 이클립스 기능
10 [이클립스]  Eclipse javadoc주석 설정하기
9 [이클립스]  [이클립스]DBEdit을 이용한 데이타베이스 관리
8 [이클립스]  <이클립스> eclipse 다운로드
7 [이클립스]  이클립스 플러그인 모음
6 [이클립스]  이클립스 팁
5 [이클립스]  이클립스 3.0 단축키 정리
4 [이클립스]  getter setter에서 comment 지우기
3 [이클립스]   이클립스 속도 향상
2 [이클립스]   [플러그인]업데이트 사이트 모음
1 [이클립스]  이클립스에 관한것(마이 이클립스)

[SWT/JFace] 설치하기

자바/SWT / JFace | 2009.04.17 15:22 | Posted by imesu-문경원

SWT/JFace를 설치하면서 궁금한 점이  두가지 있었다.

"어떻게 프로젝트를 만들어야 하는가?"
"추가적인 프로젝트 생성 시 동일한 과정을 번복적으로 이루어져야 하는가" 



 첫번째 질문의 답은 이렇다.
일반적인 java 프로젝트로 만든 후 , SWT/JFace관련 부분인 Build Paeh를 추가해 주어야한다. 
왜냐하면, 이클립스에서는 SWT/JFace 프로젝트를 현재 바로 만들 수 없기 때문이다.

두번째 질문의 답은 반복적으로 해야 한다는 것이다.
많이 번거롭기는 하지만, 이클립스에서는 SWT/JFace 프로젝트를 현재 바로 만들 수 없기 때문에 어쩔 수 없다.
그나마 다행인 것은 첫번째 과정해서 만들어놓은 Build Path를 그냥 사용할 수 있다는 점이다.

아래의 과정을 차근차근 따라가면서 이클립스에서는 SWT/JFace 프로젝트를 만들어 봅시다.


1.일반적인 JAVA Project를 생성한다.





2. 자바 프로젝트를 선택한 후 Next를 누른다.





3. 프로젝트 명을정한다. 난 jazzSWT 라고 프로젝트 명을 설정했다.







4. Libraries를 선택한 후 Add_Varible.. 버튼을 누른다.

  




5.Configure Variables를 누른 후 PATH를 추가한다.

 




6. New 버튼을 누른 후 새로운, PATH를 추가한다. (그림 006.png)

 




7. 아래의 내용을 추가한다. (그림 012.png)

 
 

추가된 PATH

내용

BOOT_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.core.boot_3.1.100.v20060603.jar

COMMAND_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.core.commands_3.2.0.I20060605-1400.jar

COMMON_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.equinox.common_3.2.0.v20060603.jar

JFACE_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.jface_3.2.1.M20060908-1000.jar

RUNTIME_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.core.runtime_3.2.0.v20060603.jar

SWT_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar

WORKBENCH_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.ui.workbench_3.2.1.M20060906-0800.jar


만일 프로젝트를 이미 생성한 후 사용 중이라면,  프로젝트 명에서 오른쪽 마우스를 클릭한 후 Properties를 누르면 면 PATH를 추가하는 화면을 찾을 수 있다.
여기서 Add Variable 버튼을 누르면 된다.






8. Class 를 생성하여 샘플 코드를 만들어 보자.

 





9. HellowWorld.java 와 HelloWorldJFace.java Class를 만들었다.


 



10. 샘플 코드를 작성한다.

 

샘플 1)  JFace 이용한 소스 <HelloWorld.java>


import org.eclipse.swt.SWT;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.Text;

 

public class HelloWorld{

 

       public static void main(String[] args){

             Display display = new Display();

             Shell shell = new Shell(display);

      

             Text helloText = new Text(shell,SWT.CENTER);

             helloText.setText("Hello World!");

      

             helloText.pack();

             shell.pack();

 

             shell.open();

 

             while(!shell.isDisposed()){

                    if(!display.readAndDispatch()) display.sleep();

             }     

             display.dispose();

       }

}


샘플 2)  JFace 이용한 소스 <HelloWorldJFace.java>


import org.eclipse.jface.window.*;

import org.eclipse.swt.*;

import org.eclipse.swt.widgets.*;

 

public class HelloWorldJFace extends ApplicationWindow{

      

       public HelloWorldJFace(){

             super(null);

       }

       protected Control createContents(Composite parent){

             Text HelloWorldJFace = new Text(parent, SWT.CENTER);

            

             HelloWorldJFace.setText("Hello World JFace");

             parent.pack();

             return parent;

       }     

       public static void main(String[] args){

             HelloWorldJFace hw = new HelloWorldJFace();

             hw.setBlockOnOpen(true);        

             hw.open();

             Display.getCurrent().dispose();        

       }

}





11. 컴파일 한다.


 





12. 컴파일 할 것(SWT Application)을 선택한다.






13. 실행 결과

 
<HelloWorld.java>


<HelloWorldJFace.java>


[안드로이드]샘풀코드 Hello Fsp21

안드로이드 | 2009.04.08 14:20 | Posted by imesu-문경원


안드로이드 설치를 마쳤다.
그럼 프로그램을 시작 "Hello World~" 를 찍어보자.
이거 찍으면 절반을 된거잖아. ㅋㅋ


1. 안드로이드 프로젝트 만들기

1) File → Project → Android Project


2) Project name: 에 생성할 프로젝트 이름을 넣는다 → Finush를 누른다.
   난 "HelloFspAndroid" 라도 프로젝트를 생성했다.


3) 위에서 Finush를 누르면 나오는 화면이다. Android Application을 선택한 후 OK버튼을 누른다.

4) 샘플 코드를 작성한다.

아래의 소스는 화면에 Hello,Fsp21 Andoid 를 출력하는 샘플 코드이다.
코드에 대한 설명을 여기선 생략한다.

package androidwave.hello;

import android.app.Activity;
import android.os.Bundle;

import android.widget.TextView;

public class HelloFspAndroid extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);       
        TextView tv =new TextView(this);
        tv.setText("Hello, Fsp21 Android");
        setContentView(tv);
    }
}


5) 실행하기-1
소스코드를 작성이 완료되면 Run → Run Configurations 를 선택한 후 몇가지 추가작업을 하자  



5) 실행하기-2
Andorid Applicaion 을 선택 → Launch에서 andoridware.hello.HelloFspAndroid 를 선택 →
Apply → Run

6) 실행 결과
아래는 샘플코드가 실행된 결과이다. RUN버튼을 누른 후 생각보다 많은 시간이 지난 후 아래의 화면이 나오니까 기달려 보자! 체감으로는 3분정도 기다린거 같다. 시간을 재보지 않아서~^^:



다음에 할일
 - 소스코드 분석 및 안드로이드 구조

 

티스토리 툴바