jateon with JRE1.4

JaTeOn 2007/02/12 23:07
JDK 1.5 환경에서 만든 jateon ..
1.5 전용 코드(?)를 없앴다고 생각했는데,

jre 1.4로 깔고 코드 수정하면서 느낀점이
java 1.4 에서 1.5로 넘어오면서 여러부분이 바뀌었다는점이다.
(제네릭 지원은 물론이고 String.replace 등의 method  등등)

이번부터 1.4 컨버팅 작업부터 rath님께서 프로젝트에 참여 하셔서 도움을 주셨다.


아래 스샷은 java 1.4에서 jateon 을 실행시킨 모습

사용자 삽입 이미지

2007/02/12 23:07 2007/02/12 23:07

업데이트 내용
  • 메세지에 %가 들어가면 오작동하던 버그 수정
  • 0.12 beta release
  • 일부 java 1.5 전용 소스코드를 1.4 형식으로 변환
  • 로그인전에 id, pass 가 형식에 맞게 입력 되었는지 체크
  • 오프라인 대화상대 아이콘 수정
  • 친구목록 보기 옵션 추가
  • 자테온 실행 위치와 크기 및 친구목록 보기 옵션을 설정 파일에 저장
  • 분리되어있던 라이브러리 파일을 병합
사용자 삽입 이미지


2007/02/07 23:05 2007/02/07 23:05

JaTeOn Alpha 0.05 release

2006/11/25 22:03

보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.


ubuntu edgy 또는 dapper에서 beryl(베릴)을 사용 할 수가 있다.

헌데 swing으로 작성된 프로그램의 일부 프레임이 나타나지 않는 현상이 발견됬다.

irc #ubutnu 채널의 sakuragi 님께서 알려주신내용

다음과 같이 고쳐주면 문제없이 잘 보인다.

ubuntu dapper, edgy 에서 테스트 해봄.
/etc/environment 파일에

AWT_TOOLKIT="MToolkit"

를 추가 해줌.
2006/11/05 17:57 2006/11/05 17:57

윈도우에서 잘 돌아갔던 자바 프로그램을
우분투 리눅스에서 돌려봤다.

java가 플랫홈인디팬던트언어니 문제 없이 잘 돌아갈거라 생각했었다
그런데 으응?

프로그램상에서 출력하는 부분은 한글이 잘 나오는데,
소켓으로 주고받는곳에서 이상하게 깨져나왔다 @.@

한참을 삽질했다 ..

하다하다 안되서 어떤분에게 물어봤더니
getBytes() 에 캐릭터셋을 지정 안해주면 시스템 기본으로 읽는다더라..
라는 말에

다음과 같은 소스를 작성해 리눅스와 윈도우에서 돌려보았다
[CODE type="java"]
class test
{
               public static void main(String args[]){
                               System.out.println("file.encoding=" + System.getProperty("file.encoding"));
               }
}
[/HTML][/CODE]


리눅스
$ java test
file.encoding=UTF-8

윈도우
java test
file.encoding=MS949
-_-;;;
다음과같이 고쳐줬다

소켓에서 읽어오는 부분...
[CODE type="java"]
      return new String(inbuf.toByteArray(),"MS949");
[/HTML][/CODE]

소켓으로 보내는 부분...
[CODE type="java"]
  out.write(ws.getBytes("MS949"));
[/HTML][/CODE]
2006/09/10 13:49 2006/09/10 13:49

ArrayList 연습

개발/Java 2006/09/05 11:20

ArrayList라는걸 한번 써봤다
eclipse 3.2 , jdk 5.0 이어서 그런지
자동완성으로 class<Element>가 자동으로 붙었다!!

[CODE type="java"]
import java.util.ArrayList;
import java.util.ListIterator;

class Buddy{
[tab]protected String loginName = null;
[tab]protected String nickName = null;
[tab]public Buddy() {
[tab][tab]
[tab]}
[tab]public Buddy(String loginName, String nickName) {
[tab][tab]this.loginName = loginName;
[tab][tab]this.nickName = nickName;
[tab]}
[tab]public String toString(){
[tab][tab]return "LName:" + loginName + "/NName:" + nickName;
[tab]}
}

public class DStest {
[tab]
[tab]private ArrayList<Buddy> list = null;
[tab]
[tab]public DStest() {
[tab][tab]list = new ArrayList<Buddy>();
[tab][tab]
[tab]}
[tab]public void add(Buddy e)
[tab]{
[tab][tab]list.add(e);
[tab]}
[tab]public Buddy getBuddy(int idx){
[tab][tab]return list.get(idx);[tab][tab]
[tab]}
[tab]
[tab]
[tab]
[tab]public void sortList(){
[tab][tab]Buddy tmp;
[tab][tab]for(int i=0;i<list.size();i++){
[tab][tab][tab]for(int j=i;j<list.size();j++)
[tab][tab][tab][tab]if(list.get(i).nickName.compareTo(list.get(j).nickName)>0){
[tab][tab][tab][tab][tab]tmp = list.get(i);
[tab][tab][tab][tab][tab]list.set(i, list.get(j));
[tab][tab][tab][tab][tab]list.set(j, tmp);
[tab][tab][tab][tab]}
[tab][tab]}
[tab]}
[tab]
[tab]public void printList(){
[tab][tab]ListIterator<Buddy> li = list.listIterator();
[tab][tab]Buddy cur;
[tab][tab]while(li.hasNext()){
[tab][tab][tab]cur = li.next();
[tab][tab][tab]System.out.println(cur);[tab][tab][tab]
[tab][tab]}
[tab][tab]
[tab]}
[tab]
[tab]public static void main(String args[]){
[tab][tab]DStest test = new DStest();
[tab][tab]test.add(new Buddy("foobar","asdfefef"));
[tab][tab]test.add(new Buddy("thisff","dsfasdfasdf"));
[tab][tab]test.add(new Buddy("asdfaf","asdfae54ewf"));
[tab][tab]test.add(new Buddy("vzxvsd","zxvcxcerqer"));
[tab][tab]test.add(new Buddy("zxcvwe","asdfer2wera"));
[tab][tab]test.add(new Buddy("saerer","zvczxcadfwe"));
[tab][tab]test.add(new Buddy("xvas43","zxvcvawer3r"));
[tab][tab]test.add(new Buddy("cxvaer","cxvaerqwer2"));
[tab][tab]
[tab][tab]test.printList();
[tab][tab]System.out.println("========SORT=============");
[tab][tab]test.sortList();
[tab][tab]
[tab][tab]test.printList();
[tab][tab][tab]
[tab]}

}

[/HTML][/CODE]

실행결과

LName:foobar/NName:asdfefef
LName:thisff/NName:dsfasdfasdf
LName:asdfaf/NName:asdfae54ewf
LName:vzxvsd/NName:zxvcxcerqer
LName:zxcvwe/NName:asdfer2wera
LName:saerer/NName:zvczxcadfwe
LName:xvas43/NName:zxvcvawer3r
LName:cxvaer/NName:cxvaerqwer2
========SORT=============
LName:asdfaf/NName:asdfae54ewf
LName:foobar/NName:asdfefef
LName:zxcvwe/NName:asdfer2wera
LName:cxvaer/NName:cxvaerqwer2
LName:thisff/NName:dsfasdfasdf
LName:saerer/NName:zvczxcadfwe
LName:xvas43/NName:zxvcvawer3r
LName:vzxvsd/NName:zxvcxcerqer
2006/09/05 11:20 2006/09/05 11:20

[##_1C|cfile6.uf.1753A5544DC50E8C2EB28B.png|width="400" height="174" alt=""|_##]

디카나 메모리카드 등에 있는 사진파일(JPG)들을,
특정위치로 복사하는 프로그램이다.

캐논 포토브라우저인가 뭔가에 내장되있는
사진 복사하기 기능을 썼었는데
다 좋은데(?)
정작 포토브라우저 로딩시간이 엄청나게 느리다
(사진 모아둔 곳에서 시작하다보니 그 내용들을 다 표시하는데 시간이 걸린다··)

-_-a
반나절 삽질끝에 이 프로그램을 만들었다.

처음 실행시후에 Dc2Hdd.conf파일이 생성되는데
마지막 설정이 저장되므로,

프로그램 인자로 -f 를 주면 따로 묻지 않고,
바로 copy 해버리는 기능이 있다.
exe다운받기↓↓
[##_1L|2280692376.xxx||_##]

jar다운받기 ↓↓ [##_1L|cfile8.uf.174D17474DC50E8C27EC2A.jar||_##]

2006/08/21 20:42 2006/08/21 20:42

Thread Test

개발/Java 2006/01/05 17:44

[CODE type="java"]
/** 쓰레드 연습 **/
class Data{
[tab]
[tab]private String data;
[tab]private boolean is_saved = false;
[tab]
[tab]public synchronized void setData(String arg){
[tab][tab]
[tab][tab] try{
[tab][tab][tab] 
[tab][tab][tab] 
[tab][tab][tab]  if(is_saved){
[tab][tab][tab][tab]   wait();
[tab][tab][tab]  }
[tab][tab] }
[tab][tab] catch (Exception e) {
[tab][tab][tab]  System.out.println("SET error");
[tab][tab] }
[tab][tab]
[tab][tab] data = arg;
[tab][tab] is_saved = true;
[tab][tab] notify();
[tab][tab]
[tab]}
[tab]public synchronized  String getData(){
[tab][tab]
[tab][tab] try{
[tab][tab][tab]  if(!is_saved)
[tab][tab][tab][tab]   wait();
[tab][tab][tab] 
[tab][tab] }
[tab][tab] catch (Exception e) {
[tab][tab][tab]  System.out.println("GET error");
[tab][tab] }
[tab][tab]
[tab][tab] String r = data;
[tab][tab] data = "";
[tab][tab] is_saved =false;
[tab][tab] notify();
[tab][tab] return r;
[tab]}
[tab]
[tab]
[tab]public boolean is_saved(){
[tab][tab] return is_saved;[tab][tab] 
[tab]}
[tab]
}

class Producer extends Thread{
[tab]Data s;
[tab]Producer(String msg, Data ss){
[tab][tab] s=ss;
[tab][tab] System.out.println(msg);[tab][tab] 
[tab]}
[tab]public void run(){
[tab][tab] int i=0;

[tab][tab] while(i<10){
[tab][tab][tab]  try{
[tab][tab][tab]  sleep((long)(Math.random()*1000));
[tab][tab][tab]  }
[tab][tab][tab]  catch (Exception e) {
[tab][tab][tab][tab]   // TODO: handle exception
[tab][tab][tab]  }
[tab][tab][tab] 
[tab][tab][tab]  System.out.println( "producer is running : " +i);
[tab][tab][tab]  s.setData("DATA ("+i+"): " + produce());
[tab][tab][tab][tab]   i++;
[tab][tab]
[tab][tab] }//end while

[tab]}//end run
[tab]
[tab]private String produce(){
[tab][tab] int r ;
[tab][tab] r =(int)( Math.random()*10);
[tab][tab] return "" + r;
[tab]}
[tab]
}
class Consumer extends Thread{
[tab]Data s;[tab]
[tab]
[tab]Consumer(String msg,Data ss){
[tab][tab] s = ss;
[tab]
[tab][tab] System.out.println(msg);
[tab]}
[tab]
[tab]public void run(){
[tab][tab] int i=0;
[tab][tab] String data="";

[tab][tab] while(i<10){
[tab][tab][tab]  try{
[tab][tab][tab][tab]   sleep((long)(Math.random()*1000));
[tab][tab][tab][tab]   }
[tab][tab][tab][tab]   catch (Exception e) {
[tab][tab][tab][tab][tab]    // TODO: handle exception
[tab][tab][tab][tab]   }
[tab][tab][tab][tab]  
[tab][tab][tab]  System.out.println( "consumer is running : " + i);
[tab][tab][tab]  data =s.getData();
[tab][tab][tab]  System.out.println(">> " +  data);

[tab][tab][tab]  i++;

[tab][tab][tab] 
[tab][tab] }//end while

[tab]}//end run[tab]
}

class Ttest{
[tab]public static void main(String args[])
[tab]{
[tab][tab] Data data = new Data();
[tab][tab] Producer t1 = new Producer("P thread is ready", data);
[tab][tab] Consumer c1 = new Consumer("C thread is ready", data);
[tab][tab]
[tab][tab]
[tab][tab] t1.start();
[tab][tab] c1.start();
[tab][tab]
[tab][tab]
[tab][tab]
[tab][tab][tab][tab]  
[tab]}[tab][tab] 
}

/**

class Data{
[tab]
[tab]private String data;
[tab]private boolean is_saved = false;
[tab]
[tab]public void setData(String arg){
[tab][tab] data = arg;
[tab][tab] is_saved = true;
[tab]}
[tab]public String getData(){
[tab][tab] String r = data;
[tab][tab] data = "";
[tab][tab] is_saved =false;
[tab][tab] return r;
[tab]}
[tab]
[tab]
[tab]public boolean is_saved(){
[tab][tab] return is_saved;[tab][tab] 
[tab]}
[tab]
}

class Producer extends Thread{
[tab]Data s;
[tab]Producer(String msg, Data ss){
[tab][tab] s=ss;
[tab][tab] System.out.println(msg);[tab][tab] 
[tab]}
[tab]public void run(){
[tab][tab] int i=0;

[tab][tab] try{
[tab][tab][tab]  while(i<10){
[tab][tab][tab][tab]  
[tab][tab][tab][tab]   System.out.println( "producer is running : " +i);
[tab][tab][tab][tab]   if(s.is_saved()){
[tab][tab][tab][tab][tab]    yield();
[tab][tab][tab][tab]   }
[tab][tab][tab][tab]   else{
[tab][tab][tab][tab][tab]    s.setData("DATA ("+i+"): " + produce());
[tab][tab][tab][tab][tab]    i++;
[tab][tab][tab][tab]   }
[tab][tab][tab][tab]  
[tab][tab][tab]  }//end while
[tab][tab] }
[tab][tab] catch (Exception e) {
[tab][tab][tab]  System.out.println(e);
[tab][tab][tab]  // TODO: handle exception
[tab][tab] }
[tab]}//end run
[tab]
[tab]private String produce(){
[tab][tab] int r ;
[tab][tab] r =(int)( Math.random()*10);
[tab][tab] return "" + r;
[tab]}
[tab]
}
class Consumer extends Thread{
[tab]Data s;[tab]
[tab]
[tab]Consumer(String msg,Data ss){
[tab][tab] s = ss;
[tab]
[tab][tab] System.out.println(msg);
[tab]}
[tab]
[tab]public void run(){
[tab][tab] int i=0;
[tab][tab] String data="";

[tab][tab] try{
[tab][tab][tab]  while(i<10){
[tab][tab][tab][tab]   System.out.println( "consumer is running : " + i);
[tab][tab][tab][tab]   if(s.is_saved()){
[tab][tab][tab][tab][tab][tab]     data =s.getData();
[tab][tab][tab][tab][tab][tab]     System.out.println(">> " +  data);
[tab][tab][tab][tab][tab][tab]     //notifyAll();
[tab][tab][tab][tab][tab][tab]     i++;
[tab][tab][tab][tab]   }
[tab][tab][tab][tab]   else{
[tab][tab][tab][tab][tab]    yield();
[tab][tab][tab][tab][tab]    yield();
[tab][tab][tab][tab][tab]   
[tab][tab][tab][tab][tab]    //this.wait();
[tab][tab][tab][tab][tab]    //this.suspend();
[tab][tab][tab][tab]   }
[tab][tab][tab][tab]  
[tab][tab][tab]  }//end while
[tab][tab] }
[tab][tab] catch (Exception e) {
[tab][tab][tab]  System.out.println(e);
[tab][tab][tab]  // TODO: handle exception
[tab][tab] }
[tab]}//end run[tab]
}

class Ttest{
[tab]public static void main(String args[])
[tab]{
[tab][tab] Data data = new Data();
[tab][tab] Producer t1 = new Producer("P thread is ready", data);
[tab][tab] Consumer c1 = new Consumer("C thread is ready", data);
[tab][tab]
[tab][tab]
[tab][tab] t1.start();
[tab][tab] c1.start();
[tab][tab]
[tab][tab]
[tab][tab]
[tab][tab][tab][tab]  
[tab]}[tab][tab] 
}
**/

[/HTML][/CODE]

2006/01/05 17:44 2006/01/05 17:44

msn bot
SBsession 처리 작업도중 ;
이 문제로 몇시간동안 삽질끝에 method overriding으로 해결

class SBField{
       public long SB;
       public int Code;
       
       
       public boolean equals(Object obj){
               SBField f = (SBField)obj;
               
               if(this.SB==f.SB && this.Code == f.Code)
                       return true;
               
               return false;
       }
}


...
...
...

public int find(SBField element){
       
       ListIterator li = list.listIterator();
       
       while(li.hasNext()){
               //System.out.println( li.nextIndex() + ":" + li.next().equals((Object)element) );
               
               Object next = li.next();
               
               //System.out.println(next);
               if(next.equals((Object)element))
                       return li.nextIndex()-1;

       }
       
       return -1;
}
2006/01/01 16:49 2006/01/01 16:49