반응형

Jakarta Ant


I. Ant 야 놀자~

Ant 란 "Java 기반의 빌드 도구입니다" 라고들 많이 나와있습니다
근데 이게 대체 무순 뜻이란 말인가 ㅡ.ㅡ;


쉽게 예기해서 환경에 구애받지 않고 간단히 java 소스를 컴파일 하고 필요한 파일이 있다면
그 파일들을 복사나 삭제하며 또한 javadoc 이나 war 같은 배포용 파일까지 생성해 주며
필요하다면 서버에 까지 바로 적용할 수 있도록 도와주는 도구입니다.


또한 여러팀원들이 프로젝트를 진행할 때 새로운 팀원이 참가하더라도
Ant 설정파일을 공유함으로써 손쉽게 참여가 가능하다는 것입니다


아직 사용해 보지 않았다면 얼렁 익혀서 사용해봅시다 무~지 편하답니다



II. 설치해보자
다운로드
Ant

http://ant.apache.org/bindownload.cgi

Ant manual

http://ant.apache.org/manual/index.html

http://ant.apache-korea.org/manual/index.html


다운받은 파일의 압축을 풀고 환경변수 및 패스를 잡아줍니다
set ANT_HOME=c:\ant
set JAVA_HOME=c:\jdk1.4.2
set PATH=%PATH%;%ANT_HOME%\bin



III. 간단한 Ant 예제

Ant를 이용하여 web application을 구성할 때 다음의 구조를 유지하기를 권장합니다


build : src, web, docs에서 결과적으로 만들어진 산출물 디렉토리
dist : build를 배포하기 위한 배포 디렉토리
docs : 배포판에 배포할 정적인 문서를 관리할 디렉토리
src : /WEB-INF/classes 에 위치할 java 소스 디렉토리
web : HTML, JSP, 이미지등의 컨텐트 디렉토리 (WEB-INF의 서브디렉토리 포함)
build.properties : build.xml에서 사용할 properties
build.xml : ant 명령으로 실행될 설정파일


src에 하나이상의 java 소스를 테스트로 넣어 놓으세요

자 이렇게 디렉토리를 설정하고 build.xml 을 다음 step에 따라 따라 해 BOA요 ^^&


STEP 1. build.xml 의 기본구조

xml을 기본적인 내용을 안다면 이해하기 쉽습니다

<project name="My Project" default="compile" basedir=".">

 <target name="clean">

   여러 작업

  </target>


  <target name="prepare" depends="clean">

   여러 작업

   </target>


   <target name="compile" depends="prepare">

    여러 작업

    </target>

</project>

하나의 build 파일은 하나의 project로 구성되며 이는 다시 여러 target으로 구성됩니다

target 이란 빌드 과정중 수행해야 할 task들을 모아놓은 job 단위 라고 보면 됩니다

compile target이라 한다면 compile에 관련된 작업들을 모아놓은 그룹이라 생각하면 쉽게 이해 될겁니다


STEP 2. 시~작 Ant 맛보기~
① build.xml에 다음을 입력한 후 저장 합니다

<project name="Unicorn Project" default="clear" basedir=".">
  <description>Simple Test</description>
 
  <property file="${basedir}/build.properties"/>
 
  <echo message="${catalina.home}"/>


   <target name="clear"/>
   
</project>

-. project

    project는 하나 이상의 target을 정의 합니다 또한 하나의 target은 task의 집합입니다

    ant를 실행할 시에 어느 타겟을 실행할 것인지 지정할 수가 있으며 (예: \ant clear)

    지정하지 않았을 경우 디폴트로 설정된 값이 사용됩니다 이부분이 default="clear"입니다

-. property

    전역변수 설정 혹은 그렇게 사용할 build.properties를 정의 합니다

    build.properties에 catalina.home을 정의하였으며 여러 환경이 변하더라도 이 값만

    변경해주면 build.xml을 수정없이 바로 실행 가능합니다

-. echo

    message 내용을 출력 합니다

-. target

    target 이란 task의 집합으로 실질적으로 실행될 코드들의 묶음입니다

    여기서는 아무 task도 없습니다


② build.properties에 다음을 입력 후 저장합니다

catalina.home=C:\Tomcat 5.0

catalina.home 은 변수로 사용할 것이며 그 값은 C:\Tomcat 5.0입니다


③ 실행

해당 디렉토리로 이동하여 도스창에서 ant 라고 칩니다

c:\예제\ant

Buildfile : build.xml

      [echo] c:\Tomcat 5.0


clear :


BUILD SUCCESSFUL

Total time : 0 seconds


STEP 3. 사전작업 하기~

이번 단계에서는 컴파일 하기전 전역변수 선언이나 컴파일 시 클래스 패스 설정을 해봅시다


① build.xml

<project name="Unicorn Project" default="prepare" basedir=".">
  <description>Simple Test</description>

  <property file="${basedir}/build.properties"/>


  <property name="app.name"      value="unicorn"/>
  <property name="app.path"       value="/${app.name}"/>
  <property name="app.version"   value="0.1-dev"/>

  <property name="build.home"    value="${basedir}/build"/>
  <property name="dist.home"     value="${basedir}/dist"/>
  <property name="docs.home"   value="${basedir}/docs"/>
  <property name="src.home"      value="${basedir}/src"/>
  <property name="web.home"     value="${basedir}/web"/>  


  <path id="compile.classpath">

    <pathelement location="${catalina.home}/common/classes"/>
    <fileset dir="${catalina.home}/common/endorsed">
      <include name="*.jar"/>
    </fileset>
    <fileset dir="${catalina.home}/common/lib">
      <include name="*.jar"/>
    </fileset>
    <pathelement location="${catalina.home}/shared/classes"/>
    <fileset dir="${catalina.home}/shared/lib">
      <include name="*.jar"/>
    </fileset>
    <fileset dir="${web.home}/WEB-INF/lib">
      <include name="*.jar"/>
    </fileset>
  </path>


  <target name="clean"
   description="Delete old build and dist directories">
    <delete dir="${build.home}"/>
    <delete dir="${dist.home}"/>
  </target>
 
  <target name="prepare" depends="clean">

    <mkdir dir="${build.home}"/>
    <mkdir  dir="${build.home}/WEB-INF"/>
    <mkdir  dir="${build.home}/WEB-INF/classes"/>
    <mkdir  dir="${build.home}/WEB-INF/lib"/>
   
    <copy todir="${build.home}">
       <fileset dir="${web.home}">
         <include name="**/*.jsp"/>
         <include name="**/*.css"/>
         <include name="**/*.html"/>
         <include name="**/*.js"/>
         <include name="**/*.jpg"/>
         <include name="**/*.gif"/>
         <include name="**/*.swf"/>
         <include name="**/*.xml"/>
         <include name="**/*.tld"/>
         <include name="**/*.jar"/>

       </fileset>
     </copy>

   </target>  

   
</project>

-. project

    이번에는 default 값을 prepare로 하였습니다 고로 target은 prepare가 실행될 것입니다

-. property

    역시나 build.properties를 정의하였고 여러 전역변수를 설정하였습니다

    build.home 이란 변수에는 ${basedir}/build 값이 정의되었으며

    build.home은 ${build.home}으로 사용할수 있습니다

    궁금하면 <echo message="${build.home}"/> 등으로 출력해 봅시다~

-. path

    ${catalina.home} 은 build.properties에서 정의하였다는것을 기역하실겁니다

    fileset은 파일들의 집합을 나타내는데 어떤 특정파일만 포함 할수 있거나 혹은 어느 특정파일만 제외할 수 있습니다

    특정파일만 포함하는것은 include 태그이며 그 반대는 exclude 입니다

    <fileset dir="${web.home}/WEB-INF/lib">
      <include name="*.jar"/>
    </fileset>

    이부분은 ${web.home}/WEB-INF/lib 에서 *.jar 파일만 클래스패스로 잡겠다는 의미입니다

-. target

   드디어 실질적으로 실행될 target 입니다.

   project 속성의 default가 prepare이므로 prepare target으로 실행하기 위해 가보니  depend 속성으로 "clean"이 설정되어 있습니다

  이것은 "clean" target을 먼저 실행 후 prepare를 실행하라는 말입니다

   즉 prepare는 clean이 실행조건 입니다

   clean target은 delete 태그를 이용하여 배포할 dist 디렉토리와 산출물 디렉토리인 build를 삭제하는 작업입니다
   prepare target으로 다시 와보면 mkdir 는 당연히 디렉토리를 만들라는 뜻입니다

   copy는 todir에 다음 web.home의 모든 fileset을 copy 하라는 의미입니다 여기서도 역시나 include, exclude가 사용될 수 있겠지요

   <include name="**/*.jsp"/> 는 모든디렉토리의 *.jsp 를 카피하라는 의미입니다

    즉 web 디렉토리의 모든 실행 가능할 파일을 build로 옮기는 작업입니다


② 실행

c:\예제\ant

Buildfile : build.xml


clean :

     [delete] : Deleting directory c:\예제\build

     [delete] : Deleting directory c:\예제\dist


prepare :

     [mkdir] Created dir : c:\예제\build\WEB-INF

     [mkdir] Created dir : c:\예제\build\WEB-INF\classes

     [mkdir] Created dir : c:\예제\build\WEB-INF\lib

     [copy] Copying 2 files to Deleting directory c:\예제\build


BUILD SUCCESSFUL

Total time : 1 seconds


STEP 4. 컴파일 하기

이제 컴파일할 모든 준비가 되었습니다

STEP2의 소스에 다음 target을 추가하고 project의 default 값을 compile로 수정한 후 실행해 봅시다


 <target name="compile" depends="prepare"
   description="Compile Java sources">


    <!-- Compile Java classes as necessary -->
    <javac srcdir="${src.home}"
          destdir="${build.home}/WEB-INF/classes">
        <classpath refid="compile.classpath"/>
    </javac>


    <!-- Copy application resources -->
    <copy  todir="${build.home}/WEB-INF/classes">
      <fileset dir="${src.home}" excludes="**/*.java"/>
    </copy>
   
 </target>

-. target

   depends가 prepare이므로 실행 순서는 clean, prepare, compile 입니다

   javac 태스크는 srcdir 인 소스디렉토리에 있는 자바소스를 desdir 쪽으로 컴파일 합니다

   classpath는 위에서 이미 설정한 compile.classpath를 사용합니다

   그 후 properties등 같은 기타 resource 들을 /WEB-INF/classes에 복사합니다

② 실행

c:\예제\ant

Buildfile : build.xml


clean :

     [delete] : Deleting directory c:\예제\build

     [delete] : Deleting directory c:\예제\dist


prepare :

     [mkdir] Created dir : c:\예제\build\WEB-INF

     [mkdir] Created dir : c:\예제\build\WEB-INF\classes

     [mkdir] Created dir : c:\예제\build\WEB-INF\lib

     [copy] Copying 2 files to Deleting directory c:\예제\build


compile :

     [javac] Compileing 1 source file to c:\예제\build\WEB-INF\classes

     [copy] Copying 1 file to c:\예제\build\WEB-INF\classes


BUILD SUCCESSFUL

Total time : 1 seconds


STEP 5. Javadoc 을 이용해 API를 만들어 보고 배포파일도 생성해 보자

이제 컴파일도 했으니 javadoc도 만들어 보고 war 같은 배포파일도 생성해 봅시다

STEP 3.까지의 build.xml에 아래 target을 더 추가하고 project의 default 값에 dist로 설정합니다

① build.xml

 <target name="javadoc" depends="compile"
    description="Create Javadoc API documentation">

     <mkdir dir="${dist.home}/docs/api"/>
     <javadoc sourcepath="${src.home}"
                  destdir="${dist.home}/docs/api"
                   packagenames="*">
       <classpath refid="compile.classpath"/>
     </javadoc>

   </target>


 <target name="dist" depends="compile,javadoc"
   description="Create binary distribution">

    <mkdir dir="${dist.home}/docs"/>

    <copy  todir="${dist.home}/docs">
      <fileset dir="${docs.home}"/>
    </copy>


    <jar jarfile="${dist.home}/${app.name}-${app.version}.war"
         basedir="${build.home}"/>

  </target>

-. target

   target의 실행순서는 clean, prpare, compile, javadoc, dist가 될겁니다

   javadoc target의 javadoc 태스트를 보면 java 소스가 있는 소스디렉토리와

   API를 생성할 타겟 디렉토리를 정해주면 알아서 API를 생성해 줍니다

   만들어진 API는 배포버젼의 dist디렉토리로 해주면 더 좋겠지요


   dist target은 배포파일인 war를 만듭니다

   필요한 문서가 있으면 docs 디렉토리를 만들어 로 복사도 하도록 합시다

   jar 태스크는 위의 방식과 같이 사용합니다


② 실행

c:\예제\ant

Buildfile : build.xml


clean :

     [delete] : Deleting directory c:\예제\build

     [delete] : Deleting directory c:\예제\dist


prepare :

     [mkdir] Created dir : c:\예제\build\WEB-INF

     [mkdir] Created dir : c:\예제\build\WEB-INF\classes

     [mkdir] Created dir : c:\예제\build\WEB-INF\lib

     [copy] Copying 2 files to Deleting directory c:\예제\build


compile :

     [javac] Compileing 1 source file to c:\예제\build\WEB-INF\classes

     [copy] Copying 1 file to c:\예제\build\WEB-INF\classes


javadoc :

     [mkdir] Created dir : c:\예제\dist\docs\api

     [javadoc] Generating Javadoc

     [javadoc] Javadoc execution

     [javadoc] Loading source files for package com.jakartaproject.db...

     [javadoc] Constructing Javadoc information...

     [javadoc] Standard Doclet version 1.4.1

     [javadoc] Building tree for all the packages and classes...

     [javadoc] Building index for all the packaes and classes...

     [javadoc] Building index for all classes...


dist :

     [jar] Building jar :Created dir : c:\예제\dist\unicorn-0.1-dev.war


BUILD SUCCESSFUL

Total time : 3 seconds



VI. Ant 실행

C:\예제\ant -help

ant [options] [target [target2 [target3] ...]]


Options :
  -help                    이 메세지의 표시
  -projecthelp           프로젝트 도움 정보의 출력
  -version                버전 정보의 출력과 종료
  -diagnostics           diagnose 나 report 문제에  도움이 되는 정보의 출력.
  -quiet, -q              한층 더 메세지를 적게
  -verbose, -v          한층 더 메세지를 많게
  -debug                 디버그 정보의 출력
  -emacs                 adornments 없이 로그 정보의 생성(produce)
  -logfile <file>         로그를 지정 파일에 출력
    -l     <file>                ''
  -logger <classname>    로그 생성을 실행하기 위한 클래스
  -listener <classname>  프로젝트 청취자(listener) 역할의 class의 인스턴스를 추가
  -buildfile <file>            지정된 빌드 파일의 사용
    -file    <file>              ''
    -f       <file>              ''
  -D<property>=<value> 지정된 프로퍼티의 값의 사용
  -propertyfile <name>    모든 프로퍼티를 파일로부터 로드  (-D프로퍼티보다 전에)
  -inputhandler <class>  입력 요청(requests)를 취급하는 클래스
  -find <file>                 파일시스템의 루트로 향해 빌드파일을  검색하고 그것을 사용


C:\예제\ant

현재 디렉토리에 있는 build.xml 파일을 이용해, 디폴트 타겟으로 Ant 를 실행합니다.


C:\예제\ant compile

현재 디렉토리에 있는 build.xml이 실행되며 파라미터로 compile을 지정하면 project의 default 값을 무시하고 compile target을 실행합니다 물론 depends 가 있다면 먼저 실행합니다

 

C:\예제\ant -buildfile test.xml

현재 디렉토리에 있는 test.xml 파일을 이용해, 디폴트 타겟으로 Ant 를 실행합니다.


C:\예제\ant -buildfile test.xml dist

현재 디렉토리에 있는 test.xml 파일을 이용해, dist 라는 이름의 타겟으로 Ant 를 실행합니다.


C:\예제\ant -buildfile test.xml -Dbuild=build/classes dist

현재 디렉토리에 있는 test.xml 파일을 이용해, dist 라는 이름의 타겟으로, build 프로퍼티에 build/classes 값을 설정해 Ant 를 실행합니다.


VII. 기본 프로퍼티

Ant는 다음과 같은 프로퍼티를 기본으로 제공합니다

basedir : 기본 디렉토리 경로를 나타내며 project 태그의 basedir에 명시되어 있습니다

ant.file : 빌드 파일의 절대 경로입니다

ant.version : Ant 버젼을 나타냅니다

ant.project.name : project 태그의 name에 명시되어있습니다

ant.java.version : 자바 버젼을 나타냅니다

자바 시스템 프로퍼티를 사용 가능 합니다

   예) ${os.name} 참고 http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#getProperties()


<echo message="${ant.file}"/> 으로 한번 출력해 보면 이해가 쉽습니다


다음 시간에는 각 타스크의 종류와 상세 설정에 관해 알아봅시다


=============================================

본문서는 자유롭게 배포/복사 할수 있지만

이문서의 저자에 대한 언급을 삭제하시면 안됩니다

저자 : GoodBug (unicorn@jakartaproject.com)

최초 : http://www.jakartaproject.com 

=============================================

반응형
1 공식 사이트 #

2 소개글 #

[http]The Eclipse Project(http://eclipse.org/projects/index.html)
The Eclipse Project is an open source software development project dedicated to providing a robust, full-featured, commercial-quality, industry platform for the development of highly integrated tools. The mission of the Eclipse Project is to adapt and evolve the eclipse technology to meet the needs of the eclipse tool building community and its users, so that the vision of eclipse as an industry platform is realized.

Eclipse 프로젝트는 견고하고, 상업용 수준의 훌륭한 통합 도구의 개발을 위한 플랫폼을 제공하기 위한 오픈소스 소프트웨어 개발 프로젝트 입니다. Eclipse 프로젝트의 임무는 Eclipse 도구를 필요로 하는 단체와 사용자들이 Eclipse 기술을 접하면서 이를 발전, 이용하도록 도모하는 것입니다. 그렇게, 산업 플렛폼으로서 Eclipse의 비전은 실천되었습니다.

2.1 스크린샷 #


eclipseScreen01.png
위 화면은 사용중인 eclipse 화면입니다(설치 후 기본 화면은 아닙니다^^)

3 Eclipse 에 대하여 #

Eclipse 는 IBM 에서 시작되었고, [http]여러 업체들(http://eclipse.org/org/index.html)이 지원하고 있는 오픈소스 프로젝트입니다. 앞에서 언급한 대로, 특정 언어보다 개발 도구를 위한 플랫폼(Platform) 개발을 목표로 하고 있습니다. 이 목표는 Eclipse의 [http]플러그인(Plugin)(http://eclipse.org/whitepapers/eclipse-overview.pdf) 구조를 통해 현실화됩니다.

3.1 특징 및 주요 기능 #

  • 자바 프로그래밍 개발이 용이하며, 플러그인을 통해 C/C++(CDT 플러그인), [http]PHP(http://sourceforge.net/projects/phpeclipse/), [http]HTML(http://sourceforge.net/projects/phpeclipse/), ASP 등 여러 언어의 개발이 가능합니다.
    • ASP 관련 플러그인은 찾기 힘드네요. 설치해본 적이 있는데, 아시는 분 링크 부탁드립니다 ^^
  • 훌륭한 CVS 클라이언트의 기능을 수행. 강력한 diff 까지 수행합니다.
  • 자바 기반으로 VM 위에서 어떤 플랫폼에서든 실행 가능합니다.
  • 다양한 플러그인을 통한 확장이 가능합니다.
  • 자바에 대해 강력한 리팩토링 기능을 제공합니다.

3.2 요즘은 #


현재(2004-12-30)는 3.0.1 버젼으로 Stable 버젼이 나와있으며, 3.1M4(Unstable) 에서는 ?JDK1.5(Java5 - 타이거) 의 모든 특징을 쓸 수 있습니다.

4 관련 사이트 #

[http]Eclipse 커뮤니티들(http://eclipse.org/community/index.html)



국내 : [http]http://jlab.net

5 설치 #

5.1 Eclipse Platform, SDK 등 설치 #

  • [http]이곳(http://eclipse.org/downloads/index.php)에서 원하는 버전을 다운로드한 후 특정 디렉토리에 압축을 푸는 것으로 설치됩니다. 구동을 위해 자바 가상 머신(JRE)이 필요합니다. Eclipse 구동시 실행위치에서 JRE 디렉토리를 찾고 그곳에 JRE가 위치하지 않는다면 시스템에서 지원하는 기본 JRE를 이용합니다.
  • 버전에 맞는 Language Packs 을 위의 같은 디렉토리에 압축을 풀면 됩니다. 특별한 설정없이 한글로케일이라면 한글로 나옵니다. (번역자님 감사합니다ㅜㅠ)

5.2 플러그인 설치 #

  • 플러그인의 제작자가 Update Manager를 이용한 배포를 제공하면 원격설치 및 관리가 가능합니다. ex) [http]AJDT(http://www.eclipse.org/ajdt/) [http]AspectJ(http://www.eclipse.org/aspectj/)
  • 플러그인들은 보통 features, plugins 라는 폴더가 있는 데 안의 내용을 설치된 디렉토리에 넣는 것만으로 플러그인을 설치할 수 있습니다. 설치 제거는 파일을 삭제하는 것으로 가능합니다.

5.2.1 쓸만한 플러그인 #


  • 플러그인 공식 사이트 : http://www.eclipse.org/community/plugins.html
  • ?EasyExplorer : ?ResourceView 등에서 Window Explorer 를 바로 열 수 있게 해준다.
  • Memory Monitor : eclipse 에서 사용하고 있는 메모리를 보여주고 Garbage Collect 버튼을 제공해준다.

    5.3 CDT설치 #

    • 도움말 -> ?SoftwareUpdate -> Find and Install -> 설치할 새 기능에 대해 검색 -> 새 원격사이트 로 가서 다음 주소[http]http://update.eclipse.org/tools/cdt/releases/new 와 원하는 이름을 넣고 갱신 시키면 Eclipse CDT 가 보입니다. 원하는 버전을 설치하시면 C, C++을 사용하실수 있습니다. by ?Gomdori
  • eclipse_update_cdt.png

    6 Visual Editor Plugin 설치 #


    Eclipse 는 기본적으로 JBuilderNetBeans 처럼 Widget Designer(버튼등을 드래그해서 레이아웃을 구성하는) 기능을 가지고 있지 않습니다. 하지만 앞서 말한 플러그인 기능을 통해 지원됩니다. Visual Editor(이하 VE) Project 를 통해 Eclipse 에서 이 기능을 쓸 수 있습니다.
  • [http]VE Project(http://www.eclipse.org/vep/) 에 가셔서 아래쪽의 Download Page -> Last Release 에 가서 최근 버젼을 따라갑니다. 그러면 Release Build 페이지에서, Requirement 에 보면 VE 를 쓰는데 필요한 다른 플러그인들이 있습니다. 거기서 EMF, GEF 가 필요하다고 적혀있으므로 두 개의 플러그인도 같이 다운받습니다. 즉, VE, EMF, GEF 를 다운 받아서 설치합니다(플러그인 설치는 위에 설명되어 있습니다). 설치하고 나면, Java Perspective 에서의 File -> New 에 Visual Class 가 생깁니다.
  • 사용방법은 다른 툴들의 Designer 와 비슷합니다.
  • eclipseVEScreen01.png
    위 화면은 VE 를 설치 후 Visual Class 를 편집하는 화면입니다.


    7 단축키 #

    [http]단축키 Eclipse SDK 2.0(http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-ui-home/accessibility/keys.html)

    개발에 자주 쓰이는 단축키는 아래와 같습니다.

    7.1 이동 단축키 #

    Editor 로 커서 이동 F12 컴파일 중 에러등으로 포커스가 다른데로 갔을 때
    특정 줄번호로 가기 CTRL + L
    다음 문제(오류부분으로 가기) CTRL + .(점) 컴파일 중 에러발생시 오류 부분으로 바로가기
    이전 문제(오류부분으로 가기) CTRL + ,(콤마)
    다음(이전) 편집창으로 이동 CTRL + (Shift) + F6 윈도우에서의 Ctrl+Tab 과 같은 기능
    마지막 편집 위치로 가기 CTRL + Q 다른 이동 단축키를 써서 특정 지역으로 왔을 때 바로 전의 위치로 가기
    해당 구문의 선언문으로 이동 F3 함수나 변수위에 커서가 있을 때 사용가능
    해당 구문의 참조 부분 검색 CTRL + Shift + G 함수나 변수위에 커서가 있을 때 이 함수나 변수를 호출,사용하는 곳 검색

    7.2 찾기 #

    찾기 Ctrl+F
    다음찾기 Ctrl+K
    이전찾기 Ctrl+Shift|K
    Incremental Search Ctrl+J - next:?DownArrow, prev:?UpArrow
    Selection Word Search Ctrl+K, Ctrl+Shift+K(Reverse)
    자바 찾기 Ctrl+H 자바의 클래스, 타입, 함수 이름등으로 찾을 수 있다. 문자열을 찾으려면 File Search 탭을 이용한다.


    7.3 디버깅 단축키 #


    브레이크 포인트 CTRL + Shift + B 현 커서의 위치에 브레이크 포인터 설정/해제
    디버깅 시작 F11
    디버깅 계속 F8
    Step Over F6 한줄씩 실행
    Step Into F5 한줄씩 실행하되 함수일 경우 그 함수 내부로 들어감
    Step out(return) F7 현재 함수를 빠져나온다
    Run to Line CTRL + R 현재 라인까지 실행


    7.4 기타 단축키 #

    저장(JDT) 및 컴파일 CTRL + S 기본 옵션으로 저장과 동시에 컴파일로 설정되어 있습니다
    열려진 모든 파일 저장(JDT) CTRL + Shift + S
    빠른 오류 수정(-Quick Fix) CTRL + 1 Eclipse 가 찾을 수 있는 간단한 문법적인 오류를 해결할 방법을 알려줍니다
    코드에 필요한 패키지 자동 import CTRL + Shift + O 현재 코드를 위해 import 해야할 패키지를 자동으로 import 코드를 넣어줍니다
    주석 처리(제거) CTRL + /(\) 현재 줄 혹은 선택된 구역의 주석으로 만들거나, 주석을 제거
    코드 형식 맞추기 Ctrl+Shift+F

    선택 영역 주석처리 Ctrl+/
    선택 영역 주석풀기 Ctrl+\


    8 실행 옵션 #

    • 초기값은 eclipes/workspace 이하의 프로젝트 명 이나 개인 홈/workspace이하의 프로젝트명 폴더에 보관됩니다.
    • 다른 장소나 메모리카드등에 프로젝트를 보존해야 할경우 다음과 같습니다.
     ./eclipse -data [폴더명] 
    • 자바 가상 머신의 지정
      이클립스 자체내에서 사용하는 가상머신을 명시적으로 지정할수 있습니다. 초기값은 쉘상에 지정한 기본 환경변수에서 불러옵니다. 가끔 자바경로명이 잘못 인식해서 이클립스가 실행이 되지 않는 경우에 이 옵션을 쓰면 실행됩니다.
     ./eclipse -vm [자바 가상머신 폴더명과 가상머신 실행파일명] 
    --darkschutepen님 팁을 가져왔습니다. by Gomdory

    9 Visual Studio 형식의 환경 만들기 #


    eclipse 에서는 다양한 환경 설정을 지원합니다. 다음은 Visual Studio 사용자들이 빠르게 eclipse 에 적응하기 위해 설정하면 좋을 것들입니다. 주로 아래의 것들만 손보면 될 것입니다. 세세한 설정은 자신의 취향에 맞춰서 설정하도록 합니다.

    • Preferences -> WorkBench -> Fonts -> Java Editor Text Font : 에디터에 맞는 폰트를 설정(VisualC++ 6.0 : Fixedsys 12, VisualStudio.NET : 돋움체 10)
    • Preferences -> Java -> Code Formmater : 함수 이름 다음에 중괄호가 다음줄에 오는 것등의 설정
    • Preferences -> Java -> Editor : 각종 색깔 결정(보통 Keyword 색깔을 파란색으로)
    • Preferences -> Debug : Remove terminated launches when a new launch is created 를 체크함.

    10 기타 #


    10.1 추천 기능 #


  • 함수나 클래스 이름에 대고 오른쪽 버튼을 누르면 나오는 Reference 를 통해 이 함수, 클래스가 쓰이는 곳을 찾아줍니다.
  • CVS 기능이 무척 강력합니다. 특히 diff 와 merge 를 무척 쉽게 해줍니다.

    10.2#


  • 3.0 이후 약간 무거워진 UI 를 다음과 같은 방법을 통해 이전의 2.x 대의 가벼운 UI 를 쓸 수 있습니다.
  •  Window -> Preferences -> Appearance -> Current Presentation 을 R21Presentaion 으로 수정 
    반응형

    -- 해외 --
    1. 이클립스 공식 홈페이지

    http://www.eclipse.org


    2. 이클립스 위키

    http://eclipsewiki.swiki.net


    -- 국내 --

    1. okjsp

    http://okjsp.pe.kr


    2. 자바스터디

    http://www.javastudy.co.kr


    3. jlab

    http://jlab.net


    4. 자바지기

    http://javajigi.net


    5. 이클립스 관련 자료와 url 이 정리된 사이트

    http://jini-club.net/phpwiki/index.php/Java/Eclipse


    6. 한국 이클립스 사용자 모임

    http://eclipsians.net

    반응형

    자바 뉴스그룹/Java Community

      comp.lang.java.programmer

      국내

      han.comp.lang.java

      Java Lobby (A Java Developers' community)

     

    국내 자바 사이트

      JavaCafe.or.kr 사이트

      yoonforh의 자바 묻고 답하기 게시판

      김덕태 님의 자바 1.1 한글 관련 내용

      한국 자바 개발자 컨퍼런스

      자바 문서 한글화 사이트(자바 문서 한글화에 참여할 뜻있는 분들을

                                        기다리고 있습니다.)

      김필호 님의 자바와 한글 게시판 (유료 자바 게시판이며 유료인만큼

      답변이 신속, 성실하게 올라옵니다.)

      김필호 님의 자바 Q&A 게시판

      강신동 님의 Korea Java Developer Connection

      지니에 흥미를 가지고 있는 그룹

      Whang's Java List Version 2.0

      Java FAQ - Korean Version

      광운대 자바랜드(JavaLand:자바네 동네)

      홍종진 님의    자바의 한글 처리 문제에 관한 리소스

      이경하 님의    자바 페이지

     

    자바 온라인 매거진

      JavaWorld - IDG's magazine for the Java community

      Java Developer's Journal

      Javology: Contents

     

    자바 리소스 디렉토리

       The Community Resource for Jini™ Technology

       Dr.Dobb's Java

       Java Directory of dmoz-open directory project  

       JavaShareWare.Com

       KPCB: Keiretsu

       Gamelan: Earthweb's Java Directory

       JARS Java Resource Listings

       artima.com - a resource for Java and Jini developers

       Jini Links

     

    자바 기술

      Threads/Concurrency

          package util.concurrent (by Doug Lea)

          (Book) Concurrent Programming in Java

       JINI

          The JINI COMMUNITY

          Jan Newmarch's Guide to JINI Technologies(A tutorial)

          지니에 흥미를 가지고 있는 그룹(Jini Korea Interesting Group)

        JNDI

          Java(TM) Naming & Directory Interface (JNDI(TM))

        Internationalization

          Writing Global Programs

        RMI

          rmi-users.logfile by thread

        JNI

          Frequently Asked Questions - JavaTM 2 SDK v1.2 and JNI

        JDBC

         JDBC Frequently Asked Questions

         http://splash.javasoft.com/jdbc/jdbc.drivers.html

         George Reese's Java Pages(JDBC-mSQL 홈페이지)

         The JDBC(tm) database access API.

         MsqlJava(mSQL.class) Home Page

         오러클 JDBC 드라이버 다운로드

        자바 빈즈

          JavaBeans - Component APIs for Java

          Java Beans White Paper자바 빈즈 개발자를 위한 Coffee Grinder

          BeanContext Examples

          BeanContext Development Kit (BcDK) Homepage

          Java 1.2 Unleashed chapter 29 - Glasgow Developments

        자바 컴파일러

          IBM 사의 Jikes 컴파일러

          GCJ, The GNU Compiler fo Java Programming Language

        자바 역컴파일러

          Jad - the fast JAva Decompiler

          IceBreaker : A "Visual" Java decompiler/disassembler

          Mocha, the Java Decompiler

        자바 C 번역기

          Toba: A Java-to-C Translator

        오피스 웨어

           ThinkFree Office(trying to be MS Office compatible)

           로터스 e_Suite

           Download Marimba Software

           Unixoid Shell of Java(자바 셸)

         메일 프로그램

           피카소 메일

         자바 파운데이션 클래스 - Swing

           Java Foundation Classes

           Swing by Matthew Robinson and Pavel Vorobiev -

           Netscape IFC: Overview

           Netscape DevEdge - IFC

           마이크로소프트의 자바 사이트(AFC)

         자바 Plugins

           Java Plug-in Product Homepage

           Java Plug-in 1.2 Software FAQ

           JAVA PLUG-IN SCRIPTING (자바 플러그인을 스크립트와 연동)

         자바 Collections API

           Download JDK 1.1 Collections Package

         Reference objects

           a Javaworld article

           Reference Objects and Garbage Collection

           Package summary of java.lang.ref

           Chapter 9 of Inside the Java 2 VM Garbage Collection

        자바 개발 환경

            시맨텍 까페

            비주얼 까페 팁 페이지

            시맨텍 비주얼 까페

            JBuilder Home page

            썬 자바 워크숍

            넷빈즈

            JDE - Java Development Environment for Emacs

           

            마이크로소프트 (비주얼 J++/C++)

            Visual J++ Web site

            Using MSVC for Java

            Using JDK1.1 in Visual J++

            Microsoft SDK for Java Download

        자바 CGI

           Java CGI HOWTO: Executing a Java CGI Program

           Java CGI HOWTO

        자바 웹 서버/JSP/서블릿

           Jeeves Home Page

           The JSDK-Apache Project

           The JavaServer Pages

           The Jakarta Project(tomcat)
           
    Tomcat을 Apache 서버에 연결시키는 HOWTO

           GNUJSP

           allaire 사의 JRun

           Java Servlet API(Sun)

           Hrl's Servlet Express

           New Atalanta Comm.'s ServletExec

           The X- Jeeves Server and Servlets FAQ

        Security

           Frequently Asked Questions - Applet Security

           Signed Applet Example (JDK 1.1.x)

           아래의 빈번한 질문과 답 사이트에 좀더 많은 정보가 있습니다.

        Performance / Benchmark

           Java Performance Tuning

           Jack Shirazi's Java Performance Tuning website

           Java Benchmark

           Volano Report

           Java Versus C/C++ Benchmarks

           Java Memory Management Performance

        자바 버그

           The Unofficial Java Spec Report

        XML 관련

            REC-DOM-Level-1-19981001 Java Language Binding

            Working with XML - The JavaTM Api for XML Parsing (JAXP)

        UML

            OMG UML 1.3 specification

            UML 툴

            플라스틱 소프트웨어(국산)

            Together/J(free whiteboard version avail.)

            Rational Rose

            Argo/UML(free and open source)

     

     자바 튜토리얼

       JDC Training and Tutorials

       Server-side computing with XML, , JDBC, Swing and Servlets

       JRE Usage Example

       Programming in Java - A Tutorial by David Mitchell

       자바 1.1 이벤트 모델 요약 설명

       Java Documentation in Windows Help Format

      ->추천:윈도우 help 형식으로 된 자바 도큐먼트

       yoonforh의 자바 튜토리얼

       Trail Map: The Java Tutorial     추천:자바 공식 튜토리얼

       자바 클라이언트/서버 강의

       Be a Java Master with Examples

       The Java Developer: How Do I?

       Java Table of Contents by Richard G Baldwin

       넷스케이프의 ViewSource

       Enterprise JavaBeans Tutorial

     

    자바 빈번한 질문과 답(FAQ)

      SUNSITE's JAVA Frequently Asked Questions

                                    (FAQ list of newsgroup comp.lang.java)

       The Java(TM) FAQ  (a good FAQ also published as a book)

       자바 프로그램을 윈도우 NT의 서비스로 만드는 방법

       (1) 링크 모음

       (2) JNI 사용하여 구현한 예

        애플릿 서명 예제 - 자바 홈페이지의 보안 문제 페이지 참고

       (1) JDK 1.1.x의 경우

       (2) JDK 1.2.x의 경우

       넷스케이프 사의 서명 도구 페이지

       VeriSign 사의 객체 서명 FAQ

       익스플로러의 자바 서명(Trust-Based Security for Java)

       익스플로러의 자바 서명 FAQ

       Microsoft Java VM version check

     

    자바 공개 소스

       Tim Macinta's Java Swapware

       Metrochat

       LazloFont

       How to access a RS-232 port from Java?

       JavaChat 1.0, a distributed Java applet

       Jim Buzbee's Hershey Font Page

       The Java Cup International Contest Winners Circle

       Simple Java Servers

       Java Distributed TCP/IP Message Handling System

       Radu Sion의 소스

       Rich Burridge Home Page

       Joerg Meissner - priv@te szene - JAVA(CreditRoll.java)

       Typewriter Applet

     

    자바 포팅 이슈

       Java-Linux

       jGuru Java on Linux FAQ

       Platforms Supporting Java

       IBM 자바 개발 센터

       IBM's Java-related Technology

       KAFFE - A virtual machine to run Java(tm)* code

       alphaWorks

       OSF Java Program Page

       넷스케이프의 JDK 1.1.x 지원

     

    썬의 자바 공식 페이지

       자바 홈페이지

       Documentation Index

       White Papers

       Using HotJava(tm)

       Java(tm) IDL

       Java API Overview

       Java: The Inside story

       Java Coding Conventions(자바 코딩 관례)

       Examples of Using the JDK 1.1 AWT

       Java Platform Debugger Architecture

       JIMI Software Development Kit - a class library for managing

     

    자바 스크립트

       JavaScript Developer Central(DevEdge Online)

       JavaScript Documentation

       Microsoft Scripting Technologies(JScript and VBScript)

       WEBFX Javascript Examples

       JavaScript Library

       The JavaScript Index v2.0

       Squatt Java/JavaScript Net-Zine

       About Kyle's JavaScript Navigator Window

    오픈지엘 - 오픈지엘 공식 사이트, 생각외로 뉴스가 잘 올라온다.
    NeHe Tutorial - OpenGL Tutorial. 내용도 좋지만, 각 플랫폼, 언어별로 구현된 소스가 유용.
    OpenGL man page - OpenGL MAN 페이지. 일종의 매뉴얼.
    OpenGL Manual - SGI 의 OpenGL 1.2 매뉴얼
    GL4Java - 자바를 위한 OpenGL
    OpenGL Win32 Tutorial - OpenGL Win32 Toturial
    GLUT3 - glut3 소스 및 다운로드.
    glut for win32 - Glut for Win32 DLL Download
    OpenGL Gamedev - OpenGL Gamedev FAQ & Mailing list
    cannon_smash - OpenGL 로 만든 오픈소스 탁구게임
    OpenGL FAQ - OpenGL FAQ
    OpenGL Reference Manual - 온라인북
    OpenGL Programming Guide - 온라인북
    OpenGL 수퍼 바이블 - 온라인북
    OpenGL 튜토리얼 링크 - OpenGL 튜토리얼 링크
    OpenGL 게임개발 FAQ - OpenGL 게임개발 FAQ
    GLVelocity - OpenGL 관련 소스 및 뉴스, 토론 등등
    DelphiGL - Delphi 로 하는 OpenGL
    Yindo - 차세대 웹 애플리케이션
    Dip2K's OpenGL - 여러 GL 관련 예제가 있는 국내 OpenGL 관련 사이트
    GLScene - OpenGL Solution for Delphi
    FLTK - OpenGL 그래픽 유저인터페이스 라이브러리(LGPL)
    Quesa - Apple Quick Draw 3D Open-source Implementation
    GLdomain - 파티클, 그라비티 등에 관한 튜토리얼
    게임튜토리얼 - 오픈지엘 튜토리얼 및 MP3 라이브러리, 쓰레드 예제 등등이 있다.
    Delphi3D - 델파이와 OpenGL를 사용한 최신 그래픽 기술에 관한 정보
    DirectX Dev - Developer-only Forum
    DirectX8 FAQ - Microsoft DirectX 8 개발자 FAQ
    DirectX 개발 - DirectX Developer Center (MSDN)
    XBOX - Microsoft XBOX
    Mr.Snow's column - DirectX8 튜토리얼
    Gamedev DirectX - Gamedev.net's DirectX resources
    DrunkenHyena - Direct3D 8.0 Tutorial
    Meltdown2001 - DirectX Meltdown2001 presentation
    ShaderStudio - Vertex/Pixel Shader 를 쉽게 쓸 수 있는 툴.
    Pixel/Vertex Shader - 톰스하드웨어의 픽셀/버텍스 쉐이더에 대한 간단한 정리
    GDC2002-DirectX - Game Developer's Conference 2002 - MS DirectX Tutorial
    STEEL 프로그래밍 리소스 - 200여개의 그래픽 관련 문서 및 튜토리얼 모음
    그래픽스문서찾기 - 다운로드는 안되고 문서명만 검색되네.
    파일포맷 - 모든 파일 포맷에 대해서.
    게임프로그래밍뉴스그룹 - comp.games.development.progrmming.algorithms
    GPGStudy.com - Game Programming Gems 스터디 사이트
    KGDA - 한국 게임 개발자 협의회
    FlipCode - 게임개발관련 뉴스와 자료들
    GameDev.Net - game developer network
    가마수트라 - game developer webzine.
    nVidia Developer - nVidia 사의 개발자 네트워크
    ATI Developer - ATI 사의 개발자 네트워크
    Matrox Developer - 매트록스 사의 개발자 네트워크
    게임-디벨로퍼 - 게임 개발 관련 자료 검색 전용
    쿼터니온 - 가마수트라의 쿼터니온 설명
    문서들 - 가마수트라의 프로그래밍 관련 문서
    gdconf - 게임 디벨로퍼 컨퍼런스
    디벨로퍼 코너 - 개발자들이 떠드는 곳
    인텔 - 개발자 네트워크 게임부문
    게임도큐먼트 - 심형근님의 게임개발 관련 각종 문서들
    게임튜토리얼 - 게임관련 튜토리얼, 문서, 토론 등등
    씽크존 - 가상 온라인 월드 개발자 네트워크
    Genesis3D - 소스가 공개된 게임엔진. 유명.
    Jet3D - Genesis3D를 기반으로 하는 차기 버전(소스공개)
    타이탄프로젝트 - 퀘이크3의 맵을 읽는 엔진(소스공개)
    AfterShock - GPL 퀘이크 렌더러
    PolyCount - 퀘이크3/2, 언리얼, 하프라이프 등의 모델데이타.
    소스포지의 3D 파운드리 - 소스포지의 공개된 여러 3D 관련 프로젝트 및 컨텐츠
    3D Engine List - 3D Engine List - 우와 많다.
    DDG Toolkit - Digital Dawn Graphics Toolkit (C++ OpenGL Terrain Toolkit)
    OpenFX - 오픈소스 공개 모델러, 렌더러, 애니메이터(게임엔진아님)
    FLY3D - FLY3D 게임 엔진. 책도 있음.
    Crystal Space - 크리스탈 스페이스-멀티플랫폼 3D 게임 엔진
    매직소프트웨어 - 3D Game Engine Design 이라는 책 소스 및 유용한 공개코드
    Nevrax - GPL 게임 엔진(AI, 3D, 네트웍 포함. 베이어패치 및 아웃도어용)
    OGRE - 객체지향 그래픽 렌더링 엔진(베지어패치 및 퀘이크 렌더러 등)
    RadonLabs - Nebula Device 라는 공개엔진. Nomads 라는 게임에 사용.
    NeoEngine - 네오엔진. 멀티 플랫폼 LGPL 게임엔진
    크리스 헤커 - 크리스 헤커의 게임물리학 및 텍스쳐매핑관련 PDF 문서가 있다.
    피터 린드스트롬 - 꽤 읽어봄직한 논문들
    UNC GEOM - UNC 의 물리시뮬레이션, 기하학관련 리서치 그룹
    casManG's 3D 게임 아트 - 3D 게임관련 모델링 튜토리얼 자료 많다.
    ingava - Q3A Prgramming/Modeling Tutorial
    Motion - 캐릭터 애니메이션에 관한 자료 및 문서
    MathEngine - 실시간 물리엔진, 데모
    Art Of Assembly - Art Of Assembly : 어셈블리 책 - 웹에 책 내용 다 있음.
    게임인공지능 - 게임관련 인공지능
    블랙북 - 마이클 애브래쉬의 블랙북 PDF
    게임 모델링 툴 링크 - 모델링 툴, 스키닝 툴, 튜토리얼 및 리소스 링크
    Creative - 크리에이티브사의 게임 개발 관련 자료
    Amit's Link - Amit's Game Programming Information
    리스텍 - 리스텍(lithtech) 게임엔진
    NetImmerse - NDL사의 NetImmerse 엔진
    Audiere - 오디에르. ogg, wav, mod, s3m 등을 지원하는 오디오 라이브러리(LGPL)
    GDZine - 게임 개발자를 위한 웹진
    Torque엔진 - Tribes 2 에 쓰였다는 Torque 게임 엔진. 개발자 당 $100 이란다.
    HighEnd3D - 하이엔드 쓰리디. 마야, XSI, Shake 커뮤니티
    씨쥐링크 - 컴퓨터 그래픽 관련
    3D Links - 3D 관련 링크 및 뉴스
    디지탈 프로듀서 - 디지털 영상 편집 및 3D 관련 웹진. 공짜 3D 모델도 있음.
    아발론.뷰포인트 - 뷰포인트사의 공개 모델링 데이타들이 있는 곳.아발론
    디지탈에이젼트 - 실사와 비슷한 3D 캐릭터가 말을 한다.(국내)
    모델뱅크 - 뷰포인트사의 모델뱅크-상용
    Steven Stahlberg 갤러리 - 여자 3D 캐릭터 죽~인다
    3D Artisan - 국내 3D 관련 잡지
    드림모션 - 국내 모션캡쳐 장비 회사
    OpenEYE - 3DS MAX 사용자 그룹
    3D 캐릭터 - 나잘난박사의 이상호님 홈
    더-포즈 - Poser 애니메이션을 판다.
    포져 - 3D 인체 포즈 및 애니메이션 툴. 훌륭...짝짝짝.
    3D필름메이커 - 3D 영상 및 컨텐츠 개발 관련
    밀크쉐이프3D - 쉐어웨어 로우 메쉬 에디터, 애니메이터(하프-라이프모델 지원빵빵)
    안드로이드월드 - 안드로이드 관련 정보
    소다플레이 - 마치 애완동물을 괴롭히는 것 같은...
    메타모션 - 실시간 모션캡쳐 시스템
    제니류님의 홈 - 마야 3D 케릭터 모델링과 애니메이션
    CGLand - 다수의 CG 갤러리 및 링크
    Digital Art Zone - Poser Map & Model 파는 곳
    Motion Analysis - Motion Analysis : Motion Capture System/Software
    Zygote - 상용 3D 모델 데이타
    Famous3D - Facial motion-capture 솔루션
    3D Artists - 세계적인 3D Artists 들의 작품 감상 및 포럼
    소아나라 - 3D 아티스트. 실사와 거의 흡사한 이미지. 국산.
    Kludge3D - 3D Modeling Tool (LGPL)
    니트정보통신 - FilmBox, Toonz, Vicon 등의 디스트리뷰터
    GMAX - 게임 MOD 개발용 gmax (공짜)
    HCIKorea - 인간과 컴퓨터 상호작용 연구회
    JoyCG - 여러 아티스트들의 3D 작품을 구경하고 싶을 때
    KBS 기술연구소 - 방송에 관계된 여러 기술 정보
    모캡코리아 - 모션캡쳐관련 서비스
    Terragen - 공개용 지형 생성 툴
    두모션 - 국산 기계식 모션캡쳐 시스템
    Quest3D - 실시간 3D 멀티미디어 툴
    소프트 쉐도우 - Michael Herf & Paul Heckbert 의 소프트쉐도우에 관한 페이지
    쉐도우 - 쉐도우에 관한 여러가지 자료
    Jeff Lander - Jeff Lander의 게임개발관련 문서
    리얼타임렌더링 - 리얼타임렌더링책선전 및 각종 링크
    Math3D - The 3D Computer Graphics Math Library Homepage
    New York Univ. - New York Univ. Media Research Lab
    Red3D - Non-photorealistic Rendering Links
    쿼터니온 - 쿼터니온링크
    SIGGRAPH PROCEEDINGS - ACM Digital Library(SIGGRAPH Proceedings Listing)
    WhyQuat - Do you really need quaternion?
    Nurbs++ - C++ Nurbs Library
    매직소프트웨어링크 - 매직소프트웨어의 그래픽관련 링크
    gdconf 2000 - Game Devel. Conf. 2000 procedings
    gdconf 2001 - Game Devel. Conf. 2001 procedings
    CFXWEB - 데모와 게임 개발에 관한 문서, 소스 및 갤러리
    I_COLLIDE - 인터액티브하며 정확한 충돌 감지 라이브러리
    ACM JGT - Journal of Graphics Tools
    RTRT - RealTime RayTracer
    피에르의 링크 - 3D, 수학, 물리관련 각종 링크
    GeometricModeling - On-Line Geometric Modeling Notes. 맘에드는 주제들.
    Heriot-Watt - Heriot-Watt University Graphics Notes. 설명양호.
    미시간주립대 - 미시간주립대 그래픽스 노트. 프레젠테이션
    Don Lancaster's Guru's Lair - Cubic Spline Library (PDF 서비스)
    Paul Bourke - Curve 및 그래픽스 관련 노트 및 C 소스코드
    Journal of Graphics Tools - 실제 현장에 바로 응용할 수 있는 그래픽스 연구
    RayTracing - RayTracing Tutorial
    TomasMöller - Real Time Rendering 의 저자
    CassEveritt - nVidia 사 개발자, Per-Pixel Lighting 관련 연구
    DavidBarraff - 현 Pixar (전 CMU). 강체시뮬레이션관련
    Jos Stam - Alias|Wavefrot 사 근무. FFT 에 기반한 간단한 Fluid Solver
    efg's 링크 - 시뮬레이션과 모델링에 관한 링크모음
    그래픽스젬스 - 차례 및 소스 다운로드
    BOID - BOID(새들의 무리?) 관련 정보(인공지능)
    NatureWizard - 그래픽으로 자연을 표현하기 위한 정보들
    오픈넙스 - 공개용 넙스(NURBS) 파일 포맷
    Jan Kautz - BRDF, Shadow Bumpmap, Realtime Bumpmap 등등
    ColDet - 공개 충돌 검사 라이브러리
    University of Leeds - 여러가지 그래픽스 관련 기본적인 튜토리얼.
    스탠포드대학 - 컴퓨터 그래픽스를 위한 수학적 방법(웨이블릿, 몬테카를로...)
    Water - Rendering and Animation of Liquid
    인텔3D 문서 - 인텔의 3D 소프트웨어 개발 관련 문서들
    GTS - GNU Triangulated Surface Library
    LargeModels - 공짜로 다운받는 무지 큰 3D 모델 파일들.
    GDAlgorithm - Game Development Algorithm 메일링 리스트
    PocketMovies - PocketMovies
    Projectmessiah - Projectmessiah
    Anzovin Studio - Anzovin Studio
    AtomFilims - AtomFilims
    4CSCG - 컴퓨터 그래픽 아트 관련
    PepeLand - Daniel Martinez Lara
    M. Gleicher 의 홈페이지 - 캐릭터 애니메이션 수업 및 모션 에디팅 논문 자료
    캐릭터 애니메이션 강의자료 - 위스콘신
    Thalmann - Thalmann's Home
    CG KAIST - KAIST COMPUTER GRAPHICS LAB
    Motion Editing Lecture - KAIST Motion Editing & Manipulation Class
    서울대 그래픽스 랩 - 서울대 대학원 그래픽스 & 미디어 랩
    Postech VR lab - 포항공대 VR 랩
    H-Anim - Humanoid Animation Working Group
    Virtual Humans - ben's Virtual Humans Page
    Bio Virtual - 3차원 얼굴 뷰어
    모션캡쳐 - 모션캡쳐 리서치
    한국생산기술연구원 - 메카트로닉스 연구실(로봇관련정보)
    Robotics - Mathematical Methods for Robotics and Vision
    Linear Algebra - Computation Methods in Linear Algebra
    MotionEditing Web - M.Gleicher 의 모션에디팅 메일링리스트
    애니큐브 - 자신의 아바타를 만든다.
    Heloli.com - 멋진 일본 캐릭터 애니. 카툰렌더링. 치마펄럭. 머리약간 펄럭.
    경사면 걷기 - 경사면에서 걷기동작 생성에 관한 논문
    스프링인간 - 플래쉬로 만든 고무줄 꼭두각시
    DX8스키닝 - DX8 버텍스 쉐이더에 대한 간단설명 및 스키닝 등에 대한 상세한 설명
    게임데브넷 - Character Animation with DirectX 8.0
    캐릭터애니관련책 - Programming Dynamic Character Animation
    CoderCorner - Pierre Terdiman의 Realtime Cloth, Flexporter, Z-Collide 등등 구경
    Advanced Character Physics - Thomas Jakobsen의 GDC 2001 강연자료
    ESC - 가상 나이트클럽.
    메타휴먼 - 메타휴먼? 재미있는 프로젝트들을 연구하는 그룹.
    Cal3D - 공개 캐릭터 엔진
    Watt - 3D게임, 실시간렌더링 및 캐릭터 애니 강연자료
    Expression - 공개 페이셜 애니메이션 툴킷(TTS, 맥스익스포터, 스크립팅)
    LinuxGames - 리눅스게임에 관한 뉴스
    리눅스 게임 톰 - 리눅스 게임에 관한 많은 뉴우스들.
    OpenAL - Loki 사의 오디오 라이브러리
    SDL - 쓸만한 멀티플랫폼 멀티미디어 라이브러리
    인드리마 오픈소스 프로젝트 - 인드리마 콘솔을 위한 오픈소스 프로젝트 네트워크
    Broodcast2000 - 리눅스시스템을 위한 실시간, 비선형 오디오 비디오 편집기 (소스공개)
    Inovation3D - 오픈소스 3D 모델링 툴, 키프레임 애니메이션과 본도 지원(간단하게...)
    Linux Game Dev. in GDC2001 - Linux Game Dev. in GDC2001
    리눅스3D - 리눅스 3D 게임 뉴스
    리눅스 3D (org) - 리눅스 3D 뉴스
    LinuxVideo - Linux Video and DVD Project
    인드리마 개발자 네트워크 - 리눅스 게임 콘솔 인드리마 개발자 네트워크
    g-Matrix - kaswan 님의 게임 프로그래머를 위한 3차원 엔진 만들기
    울트라 감자 - 뜨거운 감자 김성수님의 개인 홈 - 3D 의 몇몇 강좌와 게시판이 있슴당.
    ALTOZ - 인공생명을 연구하는 (주)오즈 인터미디어의 인공생명팀
    허영준씨개인홈 - 캐릭터 애니메이션에 관한 자료
    GTC - 성균관대학교 게임 기술 개발 지원 센터
    RedPixel - ACE, STL, Lua, OpenGL 등에 대한 정보.
    Kano - 실시간그래픽스에 관심있는 일본개발자. GPG 일본판 번역자
    Ádám Moravánszky - ShaderX 에 Bump Mapped BRDF Rendering 파트집필
    Thomas Jakobsen - Game Engine, Physics, Character Animation, Denmark
    Pion - 파연님 개인홈. 게임 개발 및 번역.
    Cass Everitte - nVidia 사에서 일하는 카스 에버릿. 몇몇 오픈지엘 예제
    Hoppe - 메쉬 최적화 및 기타 유용한 자료들. MS 사 댕김.
    Newtype - MaxScript, D3D 등등의 여러 개발관련 정보.
    Kaliver - 이주형님 개인홈. ASE Viewer 및 Qu Engine
    쥐그라운드 - 게임 그라운드. 게임에 관련된 여러가지 정보들.
    브렌더 - 최고의 공개 3D 모델러/애니메이터
    demonews - 3D 게임 데모 정보
    DPlayer - 댄스 플레이어. 무지 보기 좋다..
    게임스팟 - 게임스팝 - 게임관련웹진
    게임디벨로퍼코리아 - 게임디벨로퍼지 한국판
    뷰포인트 - 뷰포인트사의 웹3D (메타스트림)
    iWorld3D - 국내 Web3D 개발업체
    와일드 탄젠트 - Web3D, Web Streaming, ....
    sumea - 환상적인 자바 3D 영상
    WEB3D 콘소시움 - 웹3D 콘소시움
    Blaxxun3D - X3D 포맷을 지원하는 자바로 만든 3D 클라이언트
    펄스3D - 꽤 괜찮은 캐릭터 애니메이션
    슈퍼스케이프 - 워크맨 등의 가전제품에 써먹을만한...질은 별루...
    샤우트3D - 자바 기반으로 만들어짐. 툴킷도 제공
    사이코어 - Cult3D, CultEffect, PuppetTime 등의 프로덕트
    드림스케이프 - 국내 웹3D 관련
    GIBLE3D - 국내 웹 3D 뷰어 개발 업체
    QEDSoft - 3D 웹 에이전트
    오락닷컴 - 실시간 스트리밍 3D 춤 강좌 서비스
    디지털에이전트 - 3D 캐릭터가 채팅 내용을 따라 읽어주는 등...
    리눅스사랑넷 - 리눅스사용자라면 꼭 가봐야 할 사이트
    KLDP - 리눅스사용자라면 꼭 가봐야 할 사이트
    리눅스시스템관리 - 리눅스 시스템 관리자를 위한 홈페이지
    Debian-KR 메일링 리스트 - 데비안-KR 메일링 리스트 아카이브
    Trinux - 디스켓 3장에 들어가는 리눅스
    linux-firewall - linux-firewall
    certcc.or.kr - 한국정보보호센터
    쉘프로그래밍 - 쉘프로그래밍매뉴얼
    SAINT - 보안분석툴
    securityfocus.com - 보안관련정보
    정규표현식설명 - 정규표현식에 대한 설명
    Thinkpad Tool - Thinkpad Notebook Linux Configuration Tool
    네트워크프로그래밍 - BeeJ's Guide to Network Programming
    webalizer - 웹 로그 분석툴
    MRTG - 서버 네트워크 통계 프로그램
    VirtualPC - 윈도우에서 리눅스를 깔 수 있다는
    IBM Linux - 한국 IBM의 리눅스 기술문서 번역 및 자료
    Linux C - Linux C 프로그래밍에 관한
    헤커되기 - 헤커가 되는 법(에릭.S.레이몬드)
    데비안사용자 - 국내 데비안 사용자 그룹
    리눅스 가제트 - 리눅스관련 웹진
    프렉 - 헤킹관련 웹진
    CygWin - GNU + Cygnus + Windows
    GNU GPL FAQ - GPL 에 관련된 빈번한 질문과 답
    phpBB - PHP, MySQL 로 만드는 커뮤니티. 디자인이 깔끔.
    KTUG - Korea TeX Users Group
    KLDP 닷넷 - 소스포지와 같은 국내의 오픈소스 프로젝트 서비스 제공
    Emacs-KR 홈페이지 - 최고의 에디터인 Emacs 의 사용자 모임
    Emacs 설치 - 이맥스 윈도우즈용/유닉스용 설치에 관한...
    정재목씨의 Emacs - 정재목씨의 Emacs 관련 페이지
    NT Emacs - Windows 95/98/NT 용 Emacs 설명
    Elisp Manual - Emacs Lisp Programming
    Elisp intro page - Elisp Introduction & link
    Elisp Reference - Elisp Reference Manual
    VisEmacs - Visual Studio 내장 에디터로 Emacs 를 사용하게 해 줌
    Doxygen - C++ 개발 문서화 도구
    HeaderDoc - C/C++ 헤더파일을 HTML 로 문서화(펄)
    CVS Home - 버젼 컨트롤 시스템
    RCS - GNU Revision Control System
    CS-RCS - 윈도우용 RCS. 1인용은 공짜
    ViewCVS - CVS 레파지터리를 웹상에서 보기
    ActiveState - ActivePerl, ActiveTCL 등등
    Cetus링크 - 프로그래밍관련 방대한 링크
    ZipArchive - C++ Zip 압축 라이브러리(소스동봉, zlib 사용)
    zlib - zip 라이브러리
    Data Compression Lib - 데이터 압축 관련 정보(인덱스, 링크, 소스)
    GNU Win32 - Win32 용 각종 GNU 라이브러리 소스(libjpeg, crypt, freetype, zlib 등등)
    루아 - 엘레강트하고, 심플하며, 빠르고, 가벼우며, 확장성이 용이한 스크립트 언어
    공개 컴파일러들 - 각종 언어에 대한 공개 컴파일러 목록
    CGShaders - C for Graphics. 사용자그룹을 가장한 공식홈
    UPX - 실행 프로그램 압축 유틸리티. 여러분의 프로그램이 작아집니다.
    oggvorbis - 오그 보비스 플러그인, SDK 및 소스 다운로드
    ACM - The ABCs of Writing C++ Classes
    Guru of the Week - Guru of the Week
    STL - Standard C++ Library Tutorial 한글
    STL - Standard C++ Library (SGI)
    STL - Visual C++ 의 STL Sample
    C++ FAQ - C++ FAQ
    MSJ - Microsoft Systems Journal
    VC++ STL Reference - VC++ STL Reference
    Thinking in C++ - Thinking in C++ 온라인 북
    코드 구루 - 코드 샘플이 많은 개발관련 사이트
    OpenIL - Open Image Library
    Win32ASM - Iczelion's Win32 Assembly Homepage
    Priority Que & STL - by Mark Nelson (Dr. Dobb's Journal)
    STLPort - 범용, 공개, 오픈소스 STL
    데이타 압축 - 데이타 압축 관련 링크 모음
    C++ Optimize - C++ 최적화 방법에 대한 내용
    STL newbie - STL 초보자를 위한 문서
    코드프로젝트 - 다양한 장르의 프로그래밍 강좌
    MTL - Matrix Template Library
    몇몇책들 - Effective C++, More Effective C++, Design Patterns
    CPlusPlus - C++ Tutorial
    AssemRef - Assembler Programmer's Reference
    공짜 C/C++ 컴파일러들 - 공개 C/C++ 컴파일러들에 대한 상세한 목록
    어셈러브 - 국내 어셈블리 관련 홈페이지
    C++ Online Books - C++ 관련 공짜 온라인 북 링크
    STL Document - RogueWave Software 의 STL 튜토리얼 및 레퍼런스
    Blitz++ - 객체지향 공학용 수치계산 라이브러리(C++)
    행렬 라이브러리 비교 - C/C++ 용 행렬 라이브러리 비교평가
    Math Fun Facts - 수학의 재미있는 사실들
    AKROWNE's Home - 수학관련 유용한 정보(책 미러 많다)
    Math of DFD - Mathematics of DFD(Discrete Fourier Transform)
    그리스문자 읽는법 - 그리스 문자를 읽는 방법
    Numerican Recipes in C - Numerican Recipes in C 온라인 북
    Mech-World - 기계공학관련(동역학,수치해석) 강의노트 및 관련정보
    Forgodot - 미적분학 원격 강의
    NetLib - 수학관련 문서 및 소프트웨어 모음집
    MathBook - Online Books and Lecture Notes in Mathematics
    물리의 이해 - 경상대학교의 물리학 노트. 플래쉬 및 자바애플릿.
    수학사랑 - 수학교사들의 연구단체
    대한 수학회 - 대한민국 수학 학회.
    PlanetMath - Wikipedia+MathWorld+Slashdot
    MathWorld - 수학 백과 사전. 방대한 자료 상세한 설명.
    GIF math - 각종 수학 식에 대한 GIF 이미지 모음
    Physically Based Modeling - (Online Siggraph Course notes)
    Rigid-Body Link - Rigid-Body Link
    RigidTutorial - Rigid Body Simulation Tutorial
    ODE - Open Dynamics Engine, 공개 다관절 강체 동역학 엔진
    Gene's RealtyRoad - ODE 로 만든 사람 계단에서 굴러 떨어지기
    Dynamo - Dynamic Motion library
    3DPhysics - 3D Physics 관련 설명
    옥스포드다이나믹스 - 자동차 시뮬레이션 라이브러리. (상용)
    BuggyDemo - ODE 를 사용한 3D 자동차 시뮬레이션 데모. 소스 제공
    TJ의 리소스 - Thomas Jakobsen의 인터액티브 물리 시뮬레이션 관련 리소스들
    하복 - 하복(havok) 물리 엔진(상용)
    Math 엔진 - 물리 엔진 까르마(Karma) (상용)
    GamePhysics Book - David H. Eberly 의 게임 피직스 북. 아직 출간 안됨.
    SOLID - 상용 3D 충돌 라이브러리. 개인사용은 공짜.
    OpCode - 삐에르 테디맨의 공개 충돌 라이브러리. RAPID나 SOLID와 비슷한.
    반응형

    번 호 1  
    ERROR Exception in thread "main" java.lang.NoClassDefFoundError: 파일명
    발생되는 경우 클래스 파일을 찾을 수 없는 경우
    조 언 실행하려는 클래스 파일 이름이 제대로 되어 있는지 확인한다.
    또한, CLASSPATH 설정이 제대로 되어 있는지 확인하며 (도스모드에서 set명령어)
    만약, 되어있지 않다면 설정한다. (CLASSPATH = jdk1.3/jre/lib/rt.jar; 2-1강좌 참조)
     
    번 호 2  
    ERROR cannot resolve symbol
    symbol : class in(에러가 난 부분)
    location : class StackTest(찾으려는 위치)
    발생되는 경우 이해할 수 없는 클래스나 메소드, 변수명이 올경우
    조 언 보통 이 에러는 철자가 틀렸을 경우에 많이 발생한다. 클래스, 메소드, 변수의 철자를 세심히 확인해 본다.
    특히, 철자를 확인할때 대소문자 구분을 확실히 체크한다.(자바는 대소문자를 구별한다.) 그리고 클래스에서 발생할 경우 import를 해주었는지 확인해 봅니다.
     
    번 호 3  
    ERROR non-static variable 변수이름(or method 메소드이름) cannot br referenced from a static context
    발생되는 경우 static 메소드 안에서 static 으로 선언되지 않은 메소드나 변수를 참조(사용)했을 경우.
    특히, 메소드의 경우는 인스턴스를 사용하지 않고 static메소드 내에서 바로 선언한 경우.
    조 언 static 선언자의 사용여부를 살펴보고 static 메소드 안에 static으로 선언되어지지 않은 메소드나 변수가 있느지 확인해본다.
    만약 그런것이 있으면 메소드를 새로 만들어 그쪽에서 선언한다. 단, 인스턴스를 생성해서 불러줘야 한다는 것을 잊지 말아야한다.
     
    번 호 4  
    ERROR valiable 변수명 might not have been initialized
    발생되는 경우 지역변수인 변수명의 변수가 초기화가 되어있지 않았을 경우
    조 언 지역변수(메소드 내에서 선언한 변수)를 초기화 하지 않은채 선언했을 경우 발생한다.
    멤버 필드가 아닌 경우는 반드시 변수 선언시 초기화를 해주어야 한다.
    (멤버 필드는 자바 프로그램 자체에서 자동으로 default값으로 초기화 해준다.)
     
    번 호 5  
    ERROR class 클래스명 is public, should be declared in a file named 클래스명.java
    발생되는 경우 클래스명이 public으로 선언되었는데 파일명과 다를 경우
    조 언 public으로 선언된 클래스가 있다면 반드시 그 클래스명과 파일명이 같아야 한다.
    클래스명과 파일명의 대소문자 및 철자가 같은지 비교해 본다.
    또한, public으로 선언된 클래스가 하나 이상 있는지 찾아본다.(반드시 하나만 있어야한다.)
     
    번 호 6  
    ERROR push(java.lang.object)[메소드(인자로 받을 수 있는 형)] in java.util.Stack(메소드의 클래스) cannot be applied to (int)[잘못 들어간 형]
    발생되는 경우 메소드에서 인자를 받을 때 받을 수 있는 형이 아닌 자료형 또는 클래스형을 사용할 경우
    조 언 사용하는 메소드의 API를 참고하여 어떤 형을 인자로 받을 수 있는지 찾아본다.
    API를 보지 못할 경우는 각 자료형으로 인자를 직접 바꾸어 본다.
     
    번 호 7  
    ERROR java.lang.NoSuchMethodError: main
    Exception in thread "main"
    발생되는 경우 클래스 파일 안에서 main() 메소드를 찾을 수 없는 경우
    조 언 자바 애플릿이 아닌 이상 자바 애플리케이션은 반드시 main() 메소드를 사용해야 합니다.
    main() 메소드를 빼먹지 않았는지 확인해 보십시요. 또한 public static void main(String[] args) 형식으로 씌어졌는지도 확인해 보십시요.
    (main 클래스는 반드시 위와 같은 형식으로 만들어져야 합니다.)
     
    번 호 8  
    ERROR unreported exception java.io.IOException(Exception명); must be caught or declared to be thrown
    발생되는 경우 예외가 발생하는데 예외처리를 해주지 않았을 경우
    조 언 예외를 발생하는 메소드 같은 경우는 반드시 예외처리를 해주어야 합니다.
    예외를 발생하거나 예외처리를 해야하는 메소드는 API를 확인해 보시면 알 수 있습니다.
    그렇지 않다면 컴파일 후 지금처럼 에러가 난 예외를 예외처리해 주시면 됩니다.
    또한, 예외를 처리할 때는 메소드 차원에서 throws 예외명을 이용해서 처리할 수 있고
    try{} catch{} 구문을 이용해서 직접 처리해 주셔도 됩니다.(예외 강좌를 참고하세요.)
    특히, 예외도 클래스이므로 반드시 예외가 들어간 패키지를 import 해주어야 합니다.
     
    번 호 9  
    ERROR Note : Calculator.java(파일명) uses or overrides a deprecated API.
    Note : Recompile with -deprecation for details.
    발생되는 경우 JDK 버전이 높아졌거나 보안등의 기타이유로 사용이 deprecated된 메소드를 사용한 경우
    조 언 이건 예외라기 보다는 경고 입니다.(실행하면 됩니다.^^)
    JDK가 버전이 높아지거나 보안등의 이유에 따라 예전에 만들어졌지만 필요가 없어지거나 대체된 메소드가 생겨났습니다.
    그런 메소드를 deprecated 되었다고 하는데 이것은 API상에 나왔있습니다.
    또한, 컴파일할때 -deprecation 옵션주면 어떤 메소드가 deprecate됐는지 알수있읍니다.
    사용이 중지 됐다고 보기 보다는 사용을 가능하면 하지 않게끔 해주는 거죠.
    대치되었거나 버전 업된 메소드를 사용하시면 됩니다.
     
    번 호 10  
    ERROR MouseEvent(클래스명) should be declared abstract; it does not define mouseDragged(java.awt.event.MouseEvent)[메소드명(메소드가 포함된 클래스)] in MouseEvent(클래스명)
    발생되는 경우 implements한 Interface의 모든 메소드를 구현하지 않아서 발생됨
    조 언 Interface는 모든 메소드가 선언만 되고 구현되지 않은 추상(abstract) 메소드입니다.
    만약 Interface를 implements하려면 implements한 클래스가 Interface에서 선언한 모든 메소드를 구현해 주어야 합니다.
    하나라도 빠질 경우 implements한 클래스도 추상 클래스로 보고 에러가 발생합니다.
    에러에 구현해 주어야할 메소드명이 나오므로 그곳에 쓰여있는 메소드를 구현해 주면 됩니다.
    만약, 그 메소드를 구현해 주었는데 에러가 나면 철자 및 대소문자를 다시 확인해 보십시요.
     
    번 호 11  
    ERROR incompatible types
    found : /null(입력한 자료형)
    required : int(요구하는 자료형)
    발생되는 경우 입력을 했을때 맞지 않는 자료형이나 클래스형을 입력할 경우
    조 언 incompatible 은 '성미가 맞지 않는','모순된' 이라는 뜻을 가진 단어 입니다.
    단어뜻 처럼 입력 경우 required 에 나타난 자료형 및 클래스형을 요구하는데
    found 에서 나타난 자료형 및 클래스형을 써주어서 입력을 하지 못하게 되어서 발생하는 에러입니다.
    found 에 나타난 자료형을 required 에 나타난 자료형으로 변경해 주시면 됩니다.
     
    번 호 12  
    ERROR package java.servlet(패키지명) does not exist
    발생되는 경우 import한 패키지가 존재하지 않을 경우
    조 언 import한 패키지가 존재하지 않을 경우에 발생하는 에러입니다.
    철자와 대소문자를 먼저 확인하고 CLASSPATH 설정을 확인해 보시기 바랍니다.
    또한 그 곳에 패키지가 jar파일로 있는지도 확인해 보셔야 합니다.
    (API에 나와있는 패키지는 rt.jar에 다 있습니다.
    단 javax가 붙거나 다름으로 시작되는 확장 패키지는 설치해 주어야합니다.(javax.swing 제외))
     
    번 호 13  
    ERROR java.lang.NullPointerException
    Exception in thread "main"(메소드) java.lang.NullPointerException
    at java.awt.Container.addImpl(Container.java:341)... [에러가 일어난 부분]
    발생되는 경우 참조하거나 사용한 클래스 또는 자료형이 초기화 되지 않은 경우
    조 언 보통 이것은 awt나 배열 부분에서 자주 발생하는데 초기화를 해주지 않아서 많이 발생합니다.
    자바의 변수들은 기본적으로(자동으로 초기화 되는 멤버필드등을 제외하고) 초기화를 요구합니다.
    에러에 체크된 부분을 검토해 보시고 초기화를 해주십시요.
     
    번 호 14  
    ERROR ';'(빠진 부분) expected
    발생되는 경우 문법상으로 써야할 것을 쓰지 않은 경우 발생합니다.
    조 언 주로 ';'을 안써주시거나 아님 '()'(괄호)를 열기만 하고 닫지 않은 실수를 할 경우 발생합니다.
    대부분 이 에러가 발생한 경우는 에러에 나온것을 소스에 추가해 주시면 됩니다.
     
    번 호 15  
    ERROR unexpected type
    required : value(요구하는 타입)
    found : class(소스상 써준 타입)
    발생되는 경우 써주어야 할 타입이 아닌 잘못된 타입을 써주었을 경우
    조 언 unexpected type 에러를 해석하면 '기대하지 않은 타입'이란 뜻을 가지고 있습니다.
    즉, 원하는 타입(required)이 아닌데 잘못된 타입(found)을 써준 경우 발생합니다.
    에러 체크된 부분의 타입을 required 에서 나타난 타입으로 변경해 주시면 됩니다.
     
    번 호 16  
    ERROR java.lang.ArrayIndexOutOfBoundsException
    at Test.main(Test.java:10)[클래스.메소드(파일명:에러난 위치)]
    Exception in thread "main"(예외가 던져진 메소드)
    발생되는 경우 배열의 범위를 넘어선 값을 넣었을 경우
    조 언 위의 에러는 특이하게 컴파일은 이상없이 되지만 실행을 하면 발생하는 에러입니다.
    배열의 범위를 넘어설 경우에 발생하므로 에러난 위치의 배열의 참조 범위를 확인해보시고
    선언해둔 배열의 범위에 맞게 조정해 주시면 됩니다.
     
    번 호 17  
    ERROR illegal start of expression
    발생되는 경우 선언자(modifier)를 잘못 집어 넣은 경우
    조 언 에러의 단어뜻을 확인해 보면 '표현의 시작이 부적격 합니다.'하고 해석할 수 있습니다.
    보통 선언자가 맞지 않거나 쓰일데가 아닌데 선언자를 줄 경우에 많이 발생합니다.
    특히 메소드안에서 static 선언자를 쓴 경우에는 직격으로 볼수 있죠.
    에러가 난 부분의 선언자를 제거하거나 맞는 것인지 다시 확인해 보십시요.
     
    번 호 18  
    ERROR java.io.InputStream(클래스) is abstract; cannot be instantiated
    발생되는 경우 abstract로 선언된 클래스를 직접 new 명령어를 이용하여 인스턴스화 할 경우
    조 언 abstract로 선언된 클래스를 직접 new 명령어를 이용하여 인스턴스화 할 경우에 발생하는 에러입니다.
    왜냐하면, 추상 클래스는 직접 new 명령어를 이용하여 인스턴스화 할수 없기 때문입니다.(객체를 못만든다구요.)
    이 경우에는 인스턴스를 다른 방법으로 생성하시면 됩니다.
    예를 들어 인스턴스를 반환하는 메소드를 이용한다거나 상속을 통해서 상속받은 클래스의 인스턴스를 만들어
    직접 인스턴스를 만드는 효과를 낼수도 있구요. 원하시는 방법으로 바꾸어 보시길...
     
    번 호 19  
    ERROR local variable name(변수명) is accessed from within inner class; needs to be declared final
    발생되는 경우 Local Class의 변수를 final로 선언하지 않은 경우
    조 언 Local Class의 변수는 참조변수의 참조값 변동을 방지하기 위하여 final 선언자를 붙여주어야 합니다.
    변수에 final 선언자를 붙이면 변수는 값을 변동할 수 없는 상수 처럼 쓰이며
    만약 이 값을 참조할 경우 자바는 이 값을 넘기는게 아니라 이 값의 복사본을 참조 값으로 넘기게 됩니다.
    그러므로 Local Class에서 참조값 변동없이 변수를 참조할 수 있게 되는 것입니다.
    Local Class를 정의해준 곳을 살펴보고 final 선언자를 확실하게 확인하시기 바랍니다.
     
    번 호 20  
    ERROR inner classes cannot have static declarations
    발생되는 경우 내부 클래스 안에서 static 선언자를 쓴 경우
    조 언 내부 클래스 안에서는 static 선언자를 쓸수 없습니다.
    내부 클래스 안에서 사용된 static 선언자를 제거해 주십시요.
     
    번 호 21  
    ERROR referenceto List is ambiguous,both class java.util.List(클래스) in java.util(패키지)
    and class java.awt.List(클래스) in java.awt(패키지) match
    발생되는 경우 클래스 사용시 다른 패키지내에 동일이름의 클래스들이 있어서 참조가 모호할 경우
    조 언 예시를 보면 아시겠지만 import 한 패키지중에 같은 이름을 사용하는 클래스를 클래스 이름만으로
    생성함으로서 참조가 모호해질 경우 발생하는 에러입니다.
    이와 같은 경우는 import를 하나 제거 하거나 아님 java.util.List 이런식으로
    직접 그 클래스의 패키지를 같이 써줌으로서 모호성을 제거할수 있습니다.
     
    번 호 22  
    ERROR m()(메소드명) in B(클래스명) cannot override m()(메소드명) in A(클래스명);
    attempting to use incompatiable return type
    발생되는 경우 클래스를 상속받고서 메소드를 오버라이드 하고자할때 잘못한 경우
    조 언 클래스를 상속받고서 메소드를 오버라이드 할 경우에는 지켜야 하는 규칙이 있습니다.
    1. 메소드의 이름이 같아야 합니다.
    2. 메소드의 파라미터 개수, 데이터형이 같아야 합니다.
    3. 메소드의 리턴형이 같아야 합니다.
    4. 상위 메소드와 동일하거나 더 구체적인 Exception을 발생시켜야 합니다.
    5. 상위 메소드와 동일하거나 접근범위가 더 넣은 접근 제한자를 사용해야 합니다.

    님의 메소드 오버라이드시 위 규칙을 잘 지켰는가를 다시 한번 확인해 보세요.
     
    번 호 23  
    ERROR getPathBetweenRows(int,int)(메소드) has protected access in javax.swing.jTree(클래스)
    발생되는 경우 protected로 선언된 메소드를 상속 없이 직접 불러쓸 경우
    조 언 protected로 선언되어 있는 메소드는 상속하거나 같은 package에 있을 때만 쓸 수 있습니다.
    상속해서 다시 public 메소드로 값을 받던지 아니면
    public 메소드 중에서 비슷한 기능을 하는 메소드가 있는지 찾아서 바꾸어주어야 합니다.
     
    번 호 24  
    ERROR invalid method declaration; return type required
    발생되는 경우 리턴 타입을 쓰지 않아 메소드의 선언이 잘못된 경우
    조 언 리턴 타입을 쓰지 않아 메소드의 선언이 잘못된 경우에 발생하는 에러이므로
    에러가 발생한 메소드를 확인해보고 리턴 타입을 맞게 적어주어야 합니다.
     
    번 호 25  
    ERROR Error occurred during initialization of VM
    java.lang.ExceptionInInitializerError
    발생되는 경우 static으로 선언된 변수중 초기화가 안되어 있는 것이 있는 경우
    조 언 static으로 선언된 변수중에 초기화가 안된게 있는 경우에 발생하는 에러이므로
    에러가 발생한 변수를 확인해보고 알맞은 초기화를 시켜주거나 변수의 위치를
    자동 초기화가 가능한 메소드 밖의 클래스 변수로서 사용하게 합니다.
     
    번 호 26  
    ERROR Error opening registry key 'Software\JavaSoft\Java Runtime Environment'
    Error: could not find java.dll
    Error: could not find Java 2 Runtime Environment
    발생되는 경우 중복설치 등으로 인해 레지스트리 키값이 잘못되어 있는 경우
    조 언 중복설치 등으로 인해 레지스트리 키값이 잘못되어 있는 경우에 발생하는 에러이므로
    레지스트리 편집기를 열어서 HKEY_LOCAL_MACHINE -> SOFTWARE -> JavaSoft에
    보시면 3개의 키가 있을 겁니다. 그중에서 첫번째 키인 Java 런타임 환경 을 마우스
    오른쪽 버튼으로 클릭하여 Java Runtime Environment로 이름을 바꿔주시면 됩니다.
     
    번 호 27  
    ERROR Error Registry Key 'Sofrware\JavaSofrware\Java Runtime Environment\CurrentVerison'
    has value '1.1',but '1.3' is requried.
    Error: could not find java.dll
    Error: could not find java 2 Runtime Enviroment.
    발생되는 경우 중복설치 등으로 인해 레지스트리 키값의 자바 버전이 잘못되어 있는 경우
    조 언 중복설치 등으로 인해 레지스트리 키값의 자바 버전이 잘못되어 있는 경우에 발생하는 에러이므로
    레지스트리 편집기를 열어서 HKEY_LOCAL_MACHINE -> SOFTWARE -> JavaSoft -> Java Runtime Environment의 Current version의 값을 1.3으로 되어있는지 확인해 주시면 됩니다.
     
    번 호 28  
    ERROR java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver(드라이버명)
    발생되는 경우 JDBC로 데이터 베이스에 연결하는 중 드라이버를 찾지 못할 경우
    조 언 JDBC를 연결하는 중에 드라이버를 찾지 못할 경우에 발생하는 에러이므로
    각 데이터 베이스에 맞는 드라이버가 제대로 다운로드 되었는지 확인해 보시고
    드라이버의 위치가 클래스 패스에 잡혀 있는지 확인해주시면 됩니다.
     
    번 호 29  
    ERROR Method printIn(java.lang.String)(메소드명) not found in class java.io.PrintStream(클래스명)
    발생되는 경우 자신이 사용한 클래스의 메소드가 맞지 않는(=없는)경우
    조 언 자신이 사용한 클래스의 메소드가 맞지 않는(=없는) 경우에 발생하는 에러이므로
    API를 통해서 사용하고자 하는 클래스와 메소드를 다시 한번 확인해 봅니다.
    보통 이경우 메소드의 철자나 대소문자를 잘못 쓴 경우가 많으니 그점을 유심히 살표봅니다.
    마지막으로 철자와 대소문자도 맞는다면 메소드의 인자의 객체형을 맞게 주었는지 확인해보면 됩니다.
     


    반응형
    [JAVA] 배워서 남주기 게시물 [67]건
    제목 주제 작성자 내용 [모두보기] [주제입력]
      [공지]
    1. 입력된 주제에 회원님들은 답변(reply)함으로써 알고 있는 지식을 여러 벗들과 공유하게 됩니다.
      주제입력은 운영자만이 할수 있습니다.
      이점 양해해 주시기 바라며, 필요한 주제가 있으면 게시판에 올려 주십시요.. 감사 합니다.
    1. [주제] File class Example.....[운영자 재공]관련정보 추가[reply]
        드라이브명과 특정 디렉토리안의 파일 출력하기.....[2004-02-09] [studyto님 재공] [조회:190]
        파일 다이얼로그 창을 열어 파일 선택하기.....[2004-02-10] [park님 재공] [조회:143]
        특정디렉토리내의 파일목록보기.....[2004-02-12] [park님 재공] [조회:70]

    2. [주제] Applet 응용 프로그램.....[운영자 재공]관련정보 추가[reply]

    3. [주제] Application 응용 예제.....[운영자 재공]관련정보 추가[reply]
        신상정보 입력후 출력하기.....[2004-02-09] [park님 재공] [조회:163]
        문자열 타이핑효과 및 스크롤효과 주기.....[2003-10-27] [park님 재공] [조회:182]

    4. [주제] 자바 개론및 이해.....[운영자 재공]관련정보 추가[reply]
        내부 클래스(method type).....[2004-02-08] [park님 재공] [조회:98]
        접근 제한자.....[2003-10-21] [park님 재공] [조회:118]
        반복문과 제어문.....[2003-10-21] [park님 재공] [조회:71]
        extends 와 implements.....[2003-10-21] [park님 재공] [조회:74]
        자바 개요.....[2003-10-21] [park님 재공] [조회:84]
        애플리케이션의 첫번째 프로그래.....[2003-10-21] [park님 재공] [조회:69]
        배열 선언.....[2003-10-21] [park님 재공] [조회:161]
        데이터형.....[2003-10-21] [parksj님 재공] [조회:63]
        다차원 배열.....[2003-10-21] [parksh님 재공] [조회:65]
        Linux에서 자바 환경 설정하기.....[2003-11-24] [park님 재공] [조회:70]

    5. [주제] 네트워크 제어하기.....[운영자 재공]관련정보 추가[reply]
        InetAddress를 사용하여 IP주소 알아내기.....[2003-10-22] [park님 재공] [조회:26]
        URL 클래스.....[2003-10-23] [park님 재공] [조회:21]

    6. [주제] 이미지처리와 오디오 처리.....[운영자 재공]관련정보 추가[reply]

    7. [주제] 입출력 스트림 제어하기.....[운영자 재공]관련정보 추가[reply]
        한문자 입력후 출력하기.....[2004-02-09] [studyto님 재공] [조회:107]
        한줄 입력 받아 출력하기(한글 정상적 처리).....[2004-02-09] [studyto님 재공] [조회:139]
        입력받은 문자열 파일로 저장하기.....[2004-02-10] [park님 재공] [조회:177]
        파일 스트림을 사용하여 텍스트파일 모두 읽어 들이기.....[2004-02-10] [park님 재공] [조회:130]

    8. [주제] 예외처리와 쓰레드 처리.....[운영자 재공]관련정보 추가[reply]
        쓰레드.....[2003-10-21] [park님 재공] [조회:26]
        예외처리.....[2003-10-21] [park님 재공] [조회:29]

    9. [주제] 그래픽 처리.....[운영자 재공]관련정보 추가[reply]
        마우스를 사용하여 선그리기.....[2004-04-14] [park님 재공] [조회:76]
        마우스를 사용하여 사각형 그리기.....[2004-04-14] [park님 재공] [조회:66]
        마우스로 사각형 그리고 reDraw하기.....[2004-04-14] [park님 재공] [조회:59]
        도형 그리기와 메뉴.....[2004-04-16] [park님 재공] [조회:75]
        그래픽 멤소드.....[2003-10-21] [park님 재공] [조회:38]

    10. [주제] 이벤트종류와 이에 대한 사용법.....[운영자 재공]관련정보 추가[reply]
        MouseMotionListener Sample(마우스 현재 좌표값 출력).....[2004-04-02] [park님 재공] [조회:13]
        이벤트의 종류.....[2003-10-21] [park님 재공] [조회:16]

    11. [주제] AWT 컴포넌트와 Layout관리자 사용하기.....[운영자 재공]관련정보 추가[reply]
        제목표시줄 없는 창 만들기.....[2004-04-08] [park님 재공] [조회:29]
        현재 시스템의 폰트 목록 가져오기.....[2004-11-06] [studyto님 재공] [조회:24]
        Frame에서 Dialog Box 띄우기.....[2003-10-21] [park님 재공] [조회:37]
        Layout 관리자.....[2003-10-21] [park님 재공] [조회:32]
        AWT 컴포넌트.....[2003-10-23] [park님 재공] [조회:38]

    12. [주제] Swing 콤포넌트 제어하기.....[운영자 재공]관련정보 추가[reply]
        JTree.....[2005-02-01] [park님 재공] [조회:18]
        현재 윈도우의 전체 크기에 맞게 프레임 만들기.....[2005-02-13] [studyto님 재공] [조회:26]
        파일 필터링하기(FIleFilter).....[2005-02-25] [park님 재공] [조회:18]
        JScrollPane 스크롤바 자동으로 맨 아래로 이동 시키기.....[2005-03-02] [studyto님 재공] [조회:24]

    13. [주제] JDBC 사용하기.....[운영자 재공]관련정보 추가[reply]
        Record Select.....[2004-04-27] [park님 재공] [조회:61]
        테이블의 필드명 알아내기.....[2005-03-04] [studyto님 재공] [조회:65]

    14. [주제] Applet에서 DB Access하기.....[운영자 재공]관련정보 추가[reply]
        Applet에서 DB연결.....[2003-10-21] [park님 재공] [조회:30]

    15. [주제] 문자열 함수.....[운영자 재공]관련정보 추가[reply]

    16. [주제] Socket 사용하기.....[운영자 재공]관련정보 추가[reply]
        소켓을 활용한 실시간 메시지 전달 서비스.....[2003-12-03] [park님 재공] [조회:49]
        소켓을 사용한 간단한 채팅.....[2003-12-05] [park님 재공] [조회:48]
        클라이언트의 현재 마우스 좌표 송출(서버).....[2004-04-07] [park님 재공] [조회:28]
        클라이언트의 현재 마우스 좌표 송출(클라이언트).....[2004-04-07] [park님 재공] [조회:29]
        가장 간단한 소켓 서버와 클라이언트.....[2003-11-27] [park님 재공] [조회:42]

    17. vector 사용하기.....[운영자 재공]관련정보 추가[reply]

    18. (Tip)자바에서 함수는 어떤 방법으로 호출하나.....[운영자 재공]관련정보 추가[reply]

    19. 메뉴만들기.....[운영자 재공]관련정보 추가[reply]
        메뉴바 만들기(하위메뉴 포함).....[2004-04-14] [park님 재공] [조회:69]
    반응형

    1 메뉴 사용하기


    자바 Swing 에서 메뉴를 사용하기 위해서는 3개의 클래스가 필요하다


    javax.swing.JMenu 클래스

    javax.swing.JMenuBar 클래스

    javax.swing.JMenuItem 클래스


    JMenuBar 클래스는 JMenu 를 담아두는 클래스로 꼭 한개 필요하다

    JMenu 클래스는 JMenuBar 에 추가되어 각종 메뉴를 구성하는데

    예를 들자면 지금 사용하고 있는 Explorer 의 파일(F) 편집(E) 등등이 각각 하나의 메뉴이다

    JMenuItem 은 메뉴에 추가되어 사용되는 클래스로 Explorer 의 파일(F) 메뉴 내의

    새로 만들기, 열기 등등을 지칭한다..


    사용법은 JMenuBar 를 생성하고 여기에 add() 메소드로 각각 생성된 JMenu 를 더하고

    JMenu 의 add() 메소드로 각각의 JMenuItem 클래스를 더하면 된다.

    마지막으로 setJMenuBar() 메서드를 통해 JFrame 클래스에 메뉴바를 더하면 된다


    // 각종 필드 선언

        private JMenu jFile;
        private JMenuBar jMenuBar;
        private JMenuItem jOpen;


    // 각종 필드 생성

        jMenuBar = new JMenuBar();
        jFile = new JMenu("File");
        jOpen  = new JMenuItem("Open");


    // 실제 더하기

        jFile.add(jOpen);
        jMenuBar.add(jFile);

        setJMenuBar(jMenuBar);



    이벤트는 메뉴 아이템 객체에 addActionListener(); 메서드를 통해서 주면 된다


    이렇게 말이다..




    2. 파일 다이얼로그 사용하기


    javax.swing.JFileChooser 클래스를 사용하면 된다.


        File file;
       
        JFileChooser fc = new JFileChooser();
        int returnVal = fc.showOpenDialog(this);

        if (returnVal == JFileChooser.APPROVE_OPTION)
        {
                file = fc.getSelectedFile();
        }


    위 소스 처럼 간단이 사용하면 되는데

    선택된 파일 정보는 file 필드내에 저장되어 있다

    궁금하다면 if 내에 System.out.println(file.getName()); 메서드를 확인하면 된다.


    다이얼 로그는 아래 사진처럼 열리게 된다.




    옵션으로 필터도 줄 수 있는데 자세한 사항은 스킵하자


    그럼 위 두개를 사용하여 File 메뉴에 Open 을 클릭하면 파일 다이얼 로그가 열리게

    만든 소스를 만들었다

    제일 위부분 다운 받는 곳에서 다운 받아서 확인하자..

    반응형

    1. Introduction: Custom Models and Renderers


    The idea of custom data models and cell renderers was covered in detail in the Swing tutorial section on JList. JTree is another component that commonly uses these techniques. This section will illustrate the basic use of JTree, show how to respond to node selection events, give an example of a custom model (a tree that builds the children "on the fly") and show how replace the icons that appear at the tree nodes.



    2. Simple JTree


    The simplest and most common way to use JTree is to create objects of type DefaultMutableTreeNode to act as the nodes of the tree. Nodes that have no children will be displayed as leaves. You supply a value, known as the "user object", to the DefaultMutableTreeNode constructor, to act as the value at each node. The toString method of that user object is what is displayed for each node.


    Once you have some nodes, you hook them together in a tree structure via parentNode.add(childNode). Finally, you pass the node to the JTree constructor. Note that, since trees can change size based upon user input (expanding and collapsing nodes), trees are usually placed inside a JScrollPane. For example, here is a very simple tree:


    DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
    DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("Child 1");
    root.add(child1);
    DefaultMutableTreeNode child2 = new DefaultMutableTreeNode("Child 2");
    root.add(child2);
    JTree tree = new JTree(root);
    someWindow.add(new JScrollPane(tree));


    For more complicated trees, it is sometimes tedious and hard to maintain if you hook everything together "by hand". So you may find it useful to first make a simple tree-like data structure, then build nodes and hook them together automatically from that data structure. Here's an example that uses nested arrays to define the data structure.


    2.1 Simple JTree Example: Source Code (Download source code)


    import java.awt.*;
    import javax.swing.*;
    import javax.swing.tree.*;

    public class SimpleTree extends JFrame {
      public static void main(String[] args) {
        new SimpleTree();
      }

      public SimpleTree() {
        super("Creating a Simple JTree");
        WindowUtilities.setNativeLookAndFeel();
        addWindowListener(new ExitListener());
        Container content = getContentPane();
        Object[] hierarchy =
          { "javax.swing",
            "javax.swing.border",
            "javax.swing.colorchooser",
            "javax.swing.event",
            "javax.swing.filechooser",
            new Object[] 
    { "javax.swing.plaf",
                           "javax.swing.plaf.basic",
                           "javax.swing.plaf.metal",
                           "javax.swing.plaf.multi" },
            "javax.swing.table",
            new Object[] { "javax.swing.text",
                           new Object[] { "javax.swing.text.html",
                                          "javax.swing.text.html.parser" },
                           "javax.swing.text.rtf" },
            "javax.swing.tree",
            "javax.swing.undo" };
       
    DefaultMutableTreeNode root = processHierarchy(hierarchy);
        JTree tree = new JTree(root);
        content.add(new JScrollPane(tree), BorderLayout.CENTER);
        setSize(275, 300);
        setVisible(true);
      }

      /** Small routine that will make node out of the first entry
       *  in the array, then make nodes out of subsequent entries
       *  and make them child nodes of the first one. The process is
       *  repeated recursively for entries that are arrays.
       */

       
      private DefaultMutableTreeNode processHierarchy(Object[] hierarchy) {
       
    DefaultMutableTreeNode node =
          new DefaultMutableTreeNode(hierarchy[0]);
        DefaultMutableTreeNode child;
        for(int i=1; i<hierarchy.length; i++) {
          Object nodeSpecifier = hierarchy[i];
          if (nodeSpecifier instanceof Object[])  // Ie node with children
            child = processHierarchy((Object[])nodeSpecifier);
          else
            child = new DefaultMutableTreeNode(nodeSpecifier); // Ie Leaf
          node.add(child);
        }
        return(node);
      }
    }


    Note: also requires WindowUtilities.java and ExitListener.java, shown earlier.


    2.2. Simple JTree Example: Initial Result


     

    2.2. Simple JTree Example: Expanded Result
     
     
     
     
    3. Handling JTree Events
     
    To handle selection events, attach a TreeSelectionListener. The TreeSelectionListener interface requires a single method; valueChanged. You extract the currently selected node via tree.getLastSelectedPathComponent, then casting that to your node type (usually DefaultMutableTreeNode), then extracting the user object via getUserObject. However, if all you want is the node label, you can just call toString on the result of tree.getLastSelectedPathComponent. Here's an example:
     
    3.1 JTree with Selectable Nodes: Source Code (Download source code)
     
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    import javax.swing.event.*;

    public class SelectableTree extends JFrame
                                implements TreeSelectionListener {
      public static void main(String[] args) {
        new SelectableTree();
      }

      private JTree tree;
      private JTextField currentSelectionField;
     
      public SelectableTree() {
        super("JTree Selections");
        WindowUtilities.setNativeLookAndFeel();
        addWindowListener(new ExitListener());
        Container content = getContentPane();
        DefaultMutableTreeNode root =
          new DefaultMutableTreeNode("Root");
        DefaultMutableTreeNode child;
        DefaultMutableTreeNode grandChild;
        for(int childIndex=1; childIndex<4; childIndex++) {
          child = new DefaultMutableTreeNode("Child " + childIndex);
          root.add(child);
          for(int grandChildIndex=1; grandChildIndex<4; grandChildIndex++) {
            grandChild =
              new DefaultMutableTreeNode("Grandchild " + childIndex +
                                         "." + grandChildIndex);
            child.add(grandChild);
          }
        }
        tree = new JTree(root);
        tree.addTreeSelectionListener(this);
        content.add(new JScrollPane(tree), BorderLayout.CENTER);
        currentSelectionField = new JTextField("Current Selection: NONE");
        content.add(currentSelectionField, BorderLayout.SOUTH);
        setSize(250, 275);
        setVisible(true);
      }

     
    public void valueChanged(TreeSelectionEvent event) {
        currentSelectionField.setText
          ("Current Selection: " +
           tree.getLastSelectedPathComponent().toString());
      }
    }
     
    Note: also requires WindowUtilities.java and ExitListener.java, shown earlier.
     
    3.2. Selectable JTree Example: Initial Result
     
     
     
    3.3. Selectable JTree Example: Result after Expanding Tree and Selecting Node
     
     
     
     
    4. Custom Models and Dynamic Trees
     

    A JTree uses a TreeModel to get its data. As with JList, you can replace the model altogether, specifying how to extract data from the custom model. See the tutorial section on JList for an example of this general approach.

     
    In the case of JTree, however, the default TreeModel uses a TreeNode to store data associated with the tree, and it is more common to leave the TreeModel unchanged and instead make a custom TreeNode. The easiest approach for that is to start with DefaultMutableTreeNode. One of the common cases where this is useful is when you don't want to explicitly lay out each node in the tree, but instead you have some sort of algorithm that describes the children of a given node, and you want to build the tree dynamically, only actually generating children for places that the user expands. For instance, in the following example the tree is potentially infinite, with each node describing a section in an outline. The root will be "1", the first-level children will be 1.1, 1.2, 1.3, etc., the second-level children will be 1.1.1, 1.1.2, etc., and so forth. The actual number of children of each node will be determined by a command-line argument to the program.
     
    The key to building a JTree dynamically is to observe that getChildCount (a method in DefaultMutableTreeNode) will be called before any of the children will actually be retrieved. So you keep a flag indicating whether children have ever been built. So you wait until getChildCount is called, then, if the flag is false, build the children and add them. To keep the tree from trying to count the children (and thus build the nodes) in order to determine which nodes are leaf nodes, override isLeaf to always return false.
     
    4.1 Dynamic Tree: Example Code (Download source code)
     
    import java.awt.*;
    import javax.swing.*;

    public class DynamicTree extends JFrame {
      public static void main(String[] args) {
        int n = 5; // Number of children to give each node
        if (args.length > 0)
          try {
            n = Integer.parseInt(args[0]);
          } catch(NumberFormatException nfe) {
            System.out.println("Can't parse number; using default of " + n);
          }
        new DynamicTree(n);
      }

      public DynamicTree(int n) {
        super("Creating a Dynamic JTree");
        WindowUtilities.setNativeLookAndFeel();
        addWindowListener(new ExitListener());
        Container content = getContentPane();
        JTree tree = new JTree(new OutlineNode(1, n));
        content.add(new JScrollPane(tree), BorderLayout.CENTER);
        setSize(300, 475);
        setVisible(true);
      }
    }
     
    Note: also requires WindowUtilities.java and ExitListener.java, shown earlier.
     
    4.2 OutlineNode.java (Download source code)
     
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.tree.*;

    public class OutlineNode extends DefaultMutableTreeNode {
      private boolean areChildrenDefined = false;
      private int outlineNum;
      private int numChildren;

      public OutlineNode(int outlineNum, int numChildren) {
        this.outlineNum = outlineNum;
        this.numChildren = numChildren;
      }
     
     
    public boolean isLeaf() {
        return(false);
      }

     
    public int getChildCount() {
        if (!areChildrenDefined)
          defineChildNodes();
        return(super.getChildCount());
      }

      private void defineChildNodes() {
        // You must set the flag before defining children if you
        // use "add" for the new children. Otherwise you get an infinite
        // recursive loop, since add results in a call to getChildCount.
        // However, you could use "insert" in such a case.

       
    areChildrenDefined = true;
        for(int i=0; i<numChildren; i++)
          add(new OutlineNode(i+1, numChildren));
      }

      public String toString() {
        TreeNode parent = getParent();
        if (parent == null)
          return(String.valueOf(outlineNum));
        else
          return(parent.toString() + "." + outlineNum);
      }
    }
     
    4.3. Dynamic Tree: Initial Result
     
     
     
    4.4. Dynamic Tree: Result After Expanding A Few Nodes
     
     
     
     
    5. Replacing the Icons at the Tree Nodes
     
    Defining a custom method of drawing a node in a JTree is little different than it was for a JList. See the tutorial section on JList for an example of this general approach. However, one very common task is to simply to change the three icons shown to indicate unexpanded internal (ie non-leaf) nodes, expanded internal nodes, and leaf nodes. This is quite simple -- just make a DefaultTreeCellRenderer, call setOpenIcon, setClosedIcon, and setLeafIcon either with the Icon of interest (usually an ImageIcon made from a small image file) or null to just turn off node icons. Then associate this cell renderer with the tree via setCellRenderer.
     
    5.1 Replacing the Icons: Example Code (Download source code)
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.tree.*;

    /** JTree with missing or custom icons at the tree nodes.
    *  1999 Marty Hall, http://www.apl.jhu.edu/~hall/java/
    */


    public class CustomIcons extends JFrame {
      public static void main(String[] args) {
        new CustomIcons();
      }

     
    private Icon customOpenIcon = new ImageIcon("images/Circle_1.gif");
      private Icon customClosedIcon = new ImageIcon("images/Circle_2.gif");
      private Icon customLeafIcon = new ImageIcon("images/Circle_3.gif");
     
      public CustomIcons() {
        super("JTree Selections");
        WindowUtilities.setNativeLookAndFeel();
        addWindowListener(new ExitListener());
        Container content = getContentPane();
        content.setLayout(new FlowLayout());
        DefaultMutableTreeNode root =
          new DefaultMutableTreeNode("Root");
        DefaultMutableTreeNode child;
        DefaultMutableTreeNode grandChild;
        for(int childIndex=1; childIndex<4; childIndex++) {
          child = new DefaultMutableTreeNode("Child " + childIndex);
          root.add(child);
          for(int grandChildIndex=1; grandChildIndex<4; grandChildIndex++) {
            grandChild =
              new DefaultMutableTreeNode("Grandchild " + childIndex +
                                         "." + grandChildIndex);
            child.add(grandChild);
          }
        }

        JTree tree1 = new JTree(root);
        tree1.expandRow(1); // Expand children to illustrate leaf icons
        JScrollPane pane1 = new JScrollPane(tree1);
        pane1.setBorder(BorderFactory.createTitledBorder("Standard Icons"));
        content.add(pane1);

        JTree tree2 = new JTree(root);
        tree2.expandRow(2); // Expand children to illustrate leaf icons
       
    DefaultTreeCellRenderer renderer2 = new DefaultTreeCellRenderer();
        renderer2.setOpenIcon(null);
        renderer2.setClosedIcon(null);
        renderer2.setLeafIcon(null);
        tree2.setCellRenderer(renderer2);
        JScrollPane pane2 = new JScrollPane(tree2);
        pane2.setBorder(BorderFactory.createTitledBorder("No Icons"));
        content.add(pane2);

        JTree tree3 = new JTree(root);
        tree3.expandRow(3); // Expand children to illustrate leaf icons
       
    DefaultTreeCellRenderer renderer3 = new DefaultTreeCellRenderer();
        renderer3.setOpenIcon(customOpenIcon);
        renderer3.setClosedIcon(customClosedIcon);
        renderer3.setLeafIcon(customLeafIcon);
        tree3.setCellRenderer(renderer3);
        JScrollPane pane3 = new JScrollPane(tree3);
        pane3.setBorder(BorderFactory.createTitledBorder("Custom Icons"));
        content.add(pane3);

        pack();
        setVisible(true);
      }
    }
     
    Note: also requires WindowUtilities.java and ExitListener.java, shown earlier.
     
    5.2. Replacing the Icons: Result
     
     
     
    반응형

    아래의 코드를 가지고 실행가능한 JAR 파일을 만든다고 가정합니다.

    public class HelloApp {

     private String name = "";
     public HelloApp(String name) {
     this.name = name;
    }

    public void sayHello() {
     System.out.println("Hello, my name is " + name + ".");
     }

     public static void main(String[] args) {
      HelloApp app;
      if (args.length > 0)
       app = new HelloApp(args[0]);
      else
       app = new HelloApp("RESISA~");
      app.sayHello();
     }
    }

    아래의 순서에 따라 만들면 됩니다.. ^_^;

    1. Compile:

    Prompt> javac HelloApp.java

    2. Make a menifest file "MANIFEST.MF".

    Prompt> mkdir META-INF
    Prompt> edit META-INF\MANIFEST.MF

    [Remark]
    MENIFEST.MF must contain at least the following line.
    Main-Class: HelloApp

    3. Create a jar file "hello.jar" by using such a command
    jar cmf {manifest file} {jar file} {class files}

    Prompt> jar cmf "META-INF\MANIFEST.MF" hello.jar HelloApp.class

    4. Execute:

    Prompt> java -jar hello.jar
    Prompt> java -jar hello.jar "Duke Java!"

    반응형
    [1] Java Q & A
        Free Java E-Books & Tutorials
        http://www.perryland.com/Java9.shtml
    
    [2] e-Book
        Bruce Eckel's Free Electronic Books
        http://www.smart2help.com/e-books/
    
    
    유명한 Thinking 시리즈입니다.
    (3rd Edition은 아직 베타입니다.)
    
    [1] Thinking in Java 홈페이지
        http://www.mindview.net/Books/TIJ/
    
    [2] 책을 PDF 문서로 직접 받아 볼 수 있는 곳
        http://www.codecuts.com/mainpage.asp?WebPageID=314&MenuID=141
    
    [3] 2nd, 3rd editions의 모든 소스 코드가 있는 곳
        (Java 이외에 C++ 자료도 있습니다.) 
        Bruce Eckel's Free Electronic Books
        http://www.smart2help.com/e-books/
    
    [4] 공짜로 보는 Java 전자 책의 다운로드 링크가 잔뜩 있는 곳
        http://www.mindview.net/Books/DownloadSites/
    
    [*] 자바클루가 제공하는 Java 전자 책 목록
        http://www.javaclue.org/ebooks/index.jsp
    
        
    from:
    www.javaclue.org

    + Recent posts