JAVA를 이용하여 응용프로그램을 만들던 중 소스가 없을경우, 혹 잃어버린경우
이전에 컴파일 해놓은 .class 파일을 역컴파일 해서 소스를 볼수있다.
Jad 라는 JAVA Decompiler 라는 툴이며 이클립스 사용자들은 
플러그인 추가로 이클립스 에서 볼수있는 방법이다.

대표적인 자바 디컴파일러인 jad와 이클립스 플러그 jadclipse를 설치하자.

당연하게도 활용방법은
1. 잃어버린 .java 소스파일을 .class 파일로부터 복원
2. API에 대한 소스레벨 탑색이다.

특별한 설정은 필요치 않다.
두개의 압축파일을 다운받으면 된다.

1. jad 다운
사이트 : http://www.kpdus.com/jad.html
파일(window용 파일) : http://www.kpdus.com/jad/winnt/jadnt158.zip

2. jadclipse 다운
사이트 : http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download
파일(eclipse3.2.0) : http://prdownloads.sourceforge.net/jadclipse/jadclipse_3.2.0.jar?download
파일(eclipse3.2.4) : http://prdownloads.sourceforge.net/jadclipse/net.sf.jadclipse_3.2.4.jar?download

3. 설치방법
적당한 디렉토리에 압축을 푼다.
jad 파일을 eclipse 루트 디렉토리에 복사한다.
jadclipse 는 eclipse의 plugin 디렉토리에 통채로 복사한다.

4. 환경설정
이클립스 실행후
창/환경설정/일반/편집기/파일연관 으로 이동


JadClipse Class File Viewer를 선택하고 기본값을 클릭한다.

창/환경설정/Java/JadClipse 로 이동
Reuse code buffer 체크

창/환경설정/Java/JadClipse/Misc 로 이동
Convert Unicode string into ANSI strings 체크
=> 한글 깨짐 문제 해결

저작자 표시 비영리
Posted by 티엘로

이클립스를 에서 BUILD_PATH를 변경해서 사용하자.

- 왜?   자바 소스 코드를 보고 싶으니까..

그리고 Java API Docs(도움말) 설정하는 방법도 알아보도록 하자.

-왜? 도움말을 한글 도움말로 설정도 할수 있고 외부라이브러리 도움말도 볼수 있게 할수 있으니까.

일단 설정을 위해 이클립스 프로젝트 구조를 보도록 하자.



일단 설정을 위해 주의깊게 봐야할 것은 JRE System Libray[jre1.6.0_03] 이부분이다.

일단 어느 부분때문에 설정을 하면 더 편리한지 이유나 알아보고 설정하자.



왼쪽은 Declaration 뷰의 모습이고 오른쪽에 떠있는 것은 Java API Docs (이하 도움말이라 칭하자) 의

출력 상태를 보여준것이다.

기본적으로 Java 에서 지원하는 클래스의 메소드의 도움말은 영문 도움말이 뜰것이고 Declaration은 볼수가 없다.

아.. 굳이 내가 영어가 약하기 때문에 한글로 된 도움말이 필요한게 아니다. ㅡㅡ;

단지 도움말이 한글로 떳으면 바랄 뿐이고 자바의 클래스나 메소드의 소스 코드를 볼수 있길 바랄 뿐이다.

원하는 메소드를 클릭하고 F3 을 눌러 소스코드를 한번 보라..

소스코드 대신 다른 것이 나온다. 소스코드를 찾을수 없다는 것이다.

JRE System Libray[jre1.6.0_03] 이부분 문제인 것이다. JRE에는 소스코드가 포함되어 있지 않기 때문

Java Runtime Environment  이기 때문에 실행만을 위한 것이기 때문이다.

build path 를 JRE 가 아닌 JDK로 바꿔주면 된다. JRE 와 JDK 의 차이는 모두다 알고 있을꺼라 생각한다.^^

메뉴 항목에서 Window -> Preferences 를 선택한다.


Java -> Installed JREs

이클립스에서 인식하고 있는 JRE 목록이 출력된다.

나는 각 버전별로 설치가 되어있지만 나타나지 않는군.. Search로 찾아보자.

Java 가 설치된 경로를 찾아 지정해 준다.  그러면 지정한 위치에서 설치된 Java 목록을 추가해서 보여준다.


다 검색되서 나온다.. 여기서 JDK 버전을 원하는 것으로 선택하고 OK 하면 된다.

일단 여기까지가 F3키를 누르거나 Declaration 뷰를 통해서 소스코드를 볼수 있게 하는 설정방법이다.

이젠 도움말이 한글로 뜨길 바랄 뿐이고.. ㅎㅎ 시작해보자.

이것 또한 Package Explorer(탐색창) 에 있는 JRE System Libray 를 보도록 하자.

JRE System Libray 옆 + 아이콘을 클릭하면 jar 파일들의 목록이 나온다.

여기서 rt.jar  runtime java를 나타내는 즉 jvm이 돌아갈 때 기본적인 자바 api를 담고 있는 파일이다.

Package Explorer -> JRE System Libray -> rt.jar -> 마우스 오른쪽 클릭 -> Properties 선택

Location path를 지워준다.
이런 이걸 지우면 Declaration 뷰에서 소스 코드가 보이지 않는다. 하지만 F3 을 이용하면 볼수 있으니
도움말을 한글로 보기 위해서 과감히 지워주도록 하자.


그리고 Javadoc Location 에 한글 api 경로를 입력해주자.
한글API가 파일시스템에 있다면 파일시스템의 경로를 입력하고 없다면 웹주소를 입력해주도록 하자.
(내가 사용하는 한글API URL이다. http://xrath.com/javase/ko/6/docs/ko/api/ )

이제 도움말은 한글로 뜰것이고 소스코드는 F3 을 누르면 볼수 있을것이다.

Java Source Attachment  에 경로가 있으면 Javadoc Location 에 경로 설정을 해도 한글도움말이 뜨지 않으니 ㅡㅡ;

나는 Declaration 뷰에서 소스코드도 보고 싶고 한글 도움말도 뛰우고 싶지만 ㅠㅠ

우선 한글 도움말이 뜨는게 더 편리하니 설정을 하고 소스코드를 볼때는 F3 키를 이용한다.

솔직히 java 라이브러리 소스를 직접 볼일은 별로 없으니 말이다..^^

JRE System Libray 설정은 위에서 하는 방법 외에도 프로젝트 단위로 설정할수도 있다.

이 부분은 앞에서 설명한 것과 유사하니 스샷만으로 감을 잡을수 있으리라 생각한다.

그리고 도움말 부분도 좀 더 응용하면 외부 라이브러리를 포함한 도움말도 Java Docs 경로를 설정하면 ㅎㅎ

해당 외부라이브러리의 JavaDoc Location 을 설정하자.



이제 이클립스 설정을 통해 더 편리해진 이클립스에서 Java 소스 코드와 도움말을 체험해 보도록 하자.

앞에서 설정했던 도움말 한글로 뜬다..떠 ㅋㅋ ^^;; 

F3키를 누르면 새로운 창이뜨고 Java 소스가 보인다 보여.. ㅎㅎ  열공되겠넹.. ㅎㅎ



이렇게 해서 이클립스에서 자바 API 도움말을 한글로 볼수 있게 되었고 자바 API 소스도 볼수 있게 되었네요.

두가지를 다 설정하니 Declaration 에서 자바 소스를 볼수는 없지만 F3 키로 볼수 있다는걸 알아두시고..

외부 라이브러리의 API 도움말도 설정 할수 있다는 것을 알게 되었으니 아주 편리하게 사용할 수 있다는것 ㅎㅎ

스샷을 남발하느라..글이 길어지고.. 장황해지고 .. 또 글재주가 없다보니 참 도움이 될런지 ㅠㅠ.

<참고 : http://byeonely.tistory.com/entry/이클립스에서-Java-API-Docs-도움말-한글화 , http://blog.kfmes.com/207 >

<원문 출처 : http://www.pmguda.com>

<

저작자 표시 비영리
Posted by 티엘로

 

BUFFER OVERFLOWS


저작자 표시 비영리
Posted by 티엘로

import java.awt.*;
import javax.swing.*;
import javax.swing.filechooser.*;
import java.awt.event.*;
import java.io.*;

public class Note extends JFrame
{
 // 변수 선언
 JTextArea text;
 Container pane;
 JMenuBar nb = new JMenuBar();
 JMenu file,help;
 JMenuItem newI,openI,saveI,closeI,infoI,helpI;
 JFileChooser open = new JFileChooser();
 
 
 public Note()
 {
  super("MemoNote"); // 부모클래스 생성자 호출
  pane=getContentPane(); //
  //pane.setLayout(new BorderLayout());
  setJMenuBar(nb); // 메뉴바 붙임
 

  // 메뉴 및 메뉴 아이템 생성
  file = new JMenu("파일");
  help = new JMenu("정보");
 
  file.setMnemonic('F');
  help.setMnemonic('I');
 
  newI = new JMenuItem("새파일");
  openI = new JMenuItem("열기");
  saveI = new JMenuItem("저장");
  closeI = new JMenuItem("닫기");


  // 메뉴 단축키를 위한 셋팅
  newI.setAccelerator(KeyStroke.getKeyStroke('N',Event.CTRL_MASK));  // Ctrl + N
  openI.setAccelerator(KeyStroke.getKeyStroke('O',Event.CTRL_MASK)); // Ctrl + O
  saveI.setAccelerator(KeyStroke.getKeyStroke('S',Event.CTRL_MASK)); // Ctrl + S
  closeI.setAccelerator(KeyStroke.getKeyStroke('Q',Event.CTRL_MASK)); // Ctrl + Q
 
 
  infoI = new JMenuItem("정보");
 
  infoI.setAccelerator(KeyStroke.getKeyStroke('R',Event.CTRL_MASK)); // Ctrl + R

 
  // 메뉴에 메뉴 아이템 붙임
  file.add(newI);
  file.add(openI);
  file.add(saveI);
  file.add(closeI);
 
  help.add(infoI);
 
 
  nb.add(file);
  nb.add(help);
 
  // 메뉴에서 새파일 클릭했을때 이벤트 처리
  newI.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    text.setText(""); // text내용을 모두 지운다
   }
  });
 
 
 
  // 메뉴에서 열기 클릭했을때 이벤트 처리
  openI.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    int re = open.showOpenDialog(Note.this); // 파일열기 다이얼로그 창을 띄운다
    if (re==JFileChooser.APPROVE_OPTION)
    {
     String fN;
     String dir;
     String str;
   
     File file_open = open.getSelectedFile(); // 선택한 파일명을 가져온다
  
     FileInputStream fis;
     ByteArrayOutputStream bo;
      try
      {
       fis = new FileInputStream(file_open); // FileInputStream객체를 생성하고
       bo = new ByteArrayOutputStream();
       int i = 0;
       while ((i = fis.read()) != -1) // 파일이 끝날때까지 읽어서
       {
        bo.write(i);
       }
        text.setText(bo.toString()); // 화면에 뿌려준다
  
       fis.close();
       bo.close();
      }
      catch(FileNotFoundException fe)
      {}
      catch(IOException ie)
      {}

   
   
    }
  
   }
  });
 
  //메뉴에서 저장 클릭했을때 이벤트 처리
  saveI.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    int re = open.showSaveDialog(Note.this);
  
    if (re==JFileChooser.APPROVE_OPTION) // 파일저장 다이얼로그를 띄운다
    {
   
     File file_open = open.getSelectedFile(); // 저장할 파일명을 가져온다
 
     try
     {
     
     PrintWriter pw   = new PrintWriter(new BufferedWriter(new FileWriter(file_open))); // PrintWriter객체를 생성해서
     pw.write(text.getText()); // 화면의 내용을 파일에 쓴다
     pw.close();
     }
    
     catch(FileNotFoundException ie2)
        {}
     catch(IOException ie)
        {
        }
 
  
   
   
    }
   }
  });
 
  //메뉴에서 닫기를 클릭했을때 이벤트 처리
  closeI.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    dispose(); // 창을 닫고
    System.exit(0); // 종료한다
   }
  });
 
  // 메뉴에서 정보를 클릭했을때 이벤트 처리
  infoI.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
 // 정보를 보여주는 다이얼로그를 띄운다
   JOptionPane.showMessageDialog(pane , "Mr han made notepad in 2001/11/27 \n deepplin@kebi.com \n 016-9780-2494");
   }
  });
 
 
  text = new JTextArea();
 
  // 화면에 보여질 text들의 상태에 따른 색상 지정
  text.setCaretColor(Color.red);
     text.setSelectedTextColor(Color.blue);
     text.setSelectionColor(Color.pink);
     text.setBackground(Color.orange);
 
  pane.add(new JScrollPane(text));
 
 
 
 }
 
 public static void main(String[] args)
 {
  Note note = new Note(); // 객체생성
  note.setSize(600,700); // 사이즈 지정
  note.setVisible(true); // 화면에 보이게 함
 }
}


스윙으로 만든 메모장.. 단축기 정의부터, 이벤트 처리 지글루를 사용하여 GUI
어플리케이션을 만들때 도움이 되는 간단한 예제.

Posted by 티엘로