반응형
가입절차 필요없이 파일 변환이 가능합니다.
 JPG, PNG, BMP, GIF  -> ICO

사용자 삽입 이미지

http://ico.bradleygill.com/advanced.php 

반응형

1. J2SE 1.5 버전이면 java.util.Scanner 클래스   API를 참고

ex) Scanner
       System.out.print("입력값:");
      
Scanner  scan  =  new  Scanner (System.in);
       String  testStr = scan.next();

좀더 자세한 사항은 API 뒤져보세요.. API 문서 활용을 생활화 합시다.ㅋ

2. 대부분 많이 사용하는  java.io.BufferedReader

ex) BufferedReader
      
System.out.print("입력하세요: ");
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       String testStr = br.readLine();

3. 이 외에도 한글자만 받아들이는 방법으론
     char c = (char)System.in.read();  //0~255 사이의 아스키코드 한글자


상황에 따라서 try ~ catch   예외처리 해주시는것도 잊지마삼 ^^

반응형

  포털사이트에 등록하기
자신의 블로그의 자료를 적극적으로 홍보하기 위한 방안으로
포털사이트에서 자신의 블로그가 검색되도록 하는것도 좋은 방안입니다.
각 포털사이트에 자신의 블로그를 등록하세요.. 약간의 노력은 필요하겠지요^^

포털들 등록 주소 링크해 놨습니다.

네이버 홈페이지 등록하기      다음 홈페이지 등록하기           구글 홈페이지 등록하기
엠파스 홈페이지 등록하기      야후 홈페이지 등록하기          파란 홈페이지 등록하기
네이트 홈페이지 등록하기      드림위즈 홈페이지 등록하기      하나포스 홈페이지 등록하기
MSN 홈페이지 등록하기        천리안 홈페이지 등록하기

자료가 부족하거나 URL이 잘못되는등 의 이유로 심사가 보류되는 상황도 있습니다..
등록시에 주의하셔서 등록하세요. 그리고 기간도 조금 걸리는 경우도 있습니다.

아래는 메타블로그 등록 사이트 들이다.. 이곳도 등록하도록 하자 ^^

올블로그 : http://www.allblog.net/Home/
다음 블로거뉴스 :
http://bloggernews.media.daum.net/
블로그얌 : http://www.blogyam.co.kr/
이올린 : http://www.eolin.com/
블로그코리아 :
http://blogkorea.org/index_a.php 
믹시 : http://www.mixsh.com/
블로그나와 : http://www.blognawa.com/
PC사랑 :
http://www.ilovepc.co.kr
온타운넷 : http://www.ontown.net/
온20 : http://www.on20.net/
미디어몹 : http://www.mediamob.co.kr 
오픈블로그 :
http://kr.openblog.com/
프레스블로그 : http://www.pressblog.co.kr/
이버즈 블로그 :
http://blog.ebuzz.co.kr
블독 : http://blldog.co.kr
블로그플러스 : http://blogplus.joins.com/Home/
Colcol Meta :
http://www.colcol.net/
Technorati :
http://technorati.com/
블로그모아 :
http://www.blogmoa.com
코리안블로그 : http://www.koreanblog.com
블로그이야기 : http://www.blog2yagi.com/
커리어블로그 :
http://careerblog.scout.co.kr
다음DNA 렌즈 : http://dna.daum.net/lens/
위드블로거 : http://www.withblogger.com
블로그스포츠 : http://blogsports.sportsseoul.com/
나루 : http://www.naaroo.com 
누클검색 : http://www.noocle.kr/
블로그 리더 : http://www.blogreader.co.kr
라이코스 : http://www.lycos.co.kr
티아이 : http://www.teye.co.kr/

반응형
구글, 드디어 웹브라우저 시장 진출
황치규 기자 (delight@zdnet.co.kr)   2008/09/02

[지디넷코리아]소문으로만 무성하던 '검색황제' 구글의 웹브라우저 시장 진출이 마침내 현실화됐다.

이에 따라 마이크로소프트(MS) 익스플로러와 오픈소스 기반 파이어폭스가 이끄는 웹브라우저 시장 판세가 어떻게 변화할지 비상한 관심이 쏠리고 있다.

구글은 회사 블로그를 통해 화요일(현지시간) 세계 100여개 여개국에서 오픈소스에 기반한 웹브라우저 '구글 크롬' 베타 버전을 선보일 것이라고 밝혔다.

구글은 웹브라우저를 선보이는 것에 대해 사용자들에게 가치를 제공하는 동시에 웹에서의 혁신을 도울 수 있기 때문이라고 설명했다.

구글은 지난 2년간 구글 크롬 프로젝트를 진행해온 것으로 알려졌다. 2006년 10월 있었던 MS의 익스플로러7 출시가 웹브라우저 개발에 큰 영향을 미쳤다고 한다.

사용자 삽입 이미지

구글에 따르면 '구글 크롬'은 애플 사파리에도 탑재된 오픈소스 엔진 웹키트에 기반하고 있다. 자바 스크립트 버추얼 머신 V8도 탑재, 빠르게 자바 스크립트 환경을 이용할 수 있다.

'V8'은 멀티 프로세서 환경에도 적합하다고 구글은 강조했다

탭브라우저 기능도 눈에 띈다. 기존 웹브라우저의 경우 탭은 브라우저 윈도안에 배열돼 브라우저안에서 페이지를 바꿀 수 있었으나 크롬은 반대로 탭이 윈도 바깥에 배치된다.

프로세스도 독립적으로 움직이기 때문에 특정탭에 에러가 발생해도 브라우저 전체가 다운되는 경우가 없다고 한다.

구글의 등장으로 웹브라우저 시장을 둘러싼 흥행성은 더욱 높아졌다. 브라우저 역사상, 사상 최고의 접전이 펼쳐지려 하고 있다.

세계 웹 브라우저 시장은 MS 익스플로러가 70% 이상의 높은 점유율를 유지하고 있는 가운데 모질라재단 파이어폭스가 MS를 상대로 무서운 추격전을 벌이고 있는 상황이다.

구글 크롬 사용기
아침에 오자마자 회사 과장님이 올려놓으신 글을 보고 구글 크롬을 검색해 보고 다운받아보았다.
구글크롬의 아이콘은 솔직히 딱히 마음에 드는 아이콘은 아니었다.(나한테는)
므튼 일단 실행해 보고 나니 빨리 뜨는 것이 썩 마음에 든다.ㅎㅎ
그리고 간단하고 심플한 디자인이 마음에 든다. 역시 구그러스(구글스럽다는뜻^^) 하구나 하는 느낌?
사용하면서 맥이 생각나는 이유는 무엇일까? 심플하면서 기본에 충실한 브라우저인거 같다.
이것저것 클릭해보니 현재페이지정보 -> 개발자정보  흥미로운게 보인다.
자바스크립트 디버깅, 자바스크립트 콘솔 등.. 예전에 파이어폭스를 잠깐 사용하면서 관련
플러그인을 설치하여 사용한 적이 있었다. 그것을 보니 파이어폭스의 확장성을 새삼느낀다.
심플하고 빠른 속도를 생각하고 사용한다면 구글크롬 인정!합니다..
일반 사용자가 사용함에 편리할꺼 같다. 기타 다른 옵션이나 확장성을 생각한다면 파이어폭스 강추!
개인적으로 익스플로러는 별로 좋아하지 않는다. 나는 갠적으로 웹마를 사용한다.
이것저것 잡기능이 내가 사용하는데 편리하기 때문에.. ㅎㅎ 

GoogleUpdate.exe 가 떠 있다. 무엇인지?킁
http://www.prevx.com/filenames/X377845440896432011-0/GOOGLEUPDATE.EXE.html

사용자 삽입 이미지

아래 스샷은 크롬 한개 실행후 스샷이다
브라우저를 실행할때 2개 이상의 프로세스가 생성되는듯 하다 일단 브라우저 실행시 하나
그리고 탭당 한개씩 생성되는 듯 한데... 흠.. 이것이 탭브라우저에서 한개의 탭이 오류가나도
브라우저가 멈추거나 하는 일이 없다는 그 기능때문인듯 하다~!
사용자 삽입 이미지

반응형
※ EVC 4.0
증상: Windows XP sp2 에서 에뮬레이터 실행 안됨

에러메세지
"One or more files from the Emulator for Windows CE installation is missing.
Please reinstall Emulator for Windows CE and try again."

해결:
1. Click Start, click Run, type sysdm.cpl, and then click OK.
2. In the System Properties dialog box, click the Advanced tab.
3. Under Start and Recovery, click Settings.
4. In the Startup and Recovery dialog box, click Edit.
5. Disable PAE mode by removing the /pae option if it exists.
6. Remove the /noexecute option if it exists.
7. Add the /execute option.
8. On the File menu, click Save.
9. To exit Notepad, click Exit on the File menu.
10. To close System Properties, click OK two times.
11. Restart your computer.

boot.ini  파일을 수정하라는 말인데, boot.ini 파일의 원본은 다음과 같음.(파일 전체 내용이 아니라 수정할 부분만 발췌한 것)
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

이렇게 수정하면 됩니다.
물리주소확장의 여부 관련 설정인듯 하네요.
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /execute=optin /fastdetect
반응형
이벤트 응모수신거부
반응형
자바 웹 스타트(JWS)는 웹 기반으로 애플리케이션을 배포할 수 있지 않습니까? 그런데 사람들은 왜 CD-ROM으로 자바 웹 스타트(JWS) 애플리케이션을 배포하려고 할까요? 이유는 여러 가지입니다. 우선, 대규모 애플리케이션이라면 고속 광대역 회선으로도 설치 프로그램 전체를 다운로드하기가 만만치 않을 수 있습니다. 둘째로, 기업 보안 등의 이유로 인해 온라인 연결이 안 되는 데스크탑도 많고 또 인터넷에 액세스할 수 없는 시스템도 많습니다. 마지막으로, 그저 CD가 더 좋다는 사람들이 많기 때문입니다.

클라이언트 기업에서 광대역 회선이 거의 없는 지역을 비롯하여 전 세계에 자사의 애플리케이션을 배포해 달라고 요청합니다. 이 애플리케이션에는 수많은 제품에 대한 정보와 함께 상세한 도면과 다이어그램까지 들어 있습니다. 애플리케이션의 상당 부분은 이러한 정보로 구성되어 있으며 JVM을 포함한 전체 설치 용량은 40MB를 넘어섭니다. 또 이 회사에서는 무역 박람회 등에서도 홍보물과 함께 이 애플리케이션을 CD에 담아 배포하고 싶다고 합니다. 그러므로 CD 배포도 준비해야 합니다. 보통, CD 설치에는 여러 가지 상업적 설치 프로그램이나 오픈소스 설치 프로그램을 이용하게 됩니다. 그러나 자바 웹 스타트로 실행하게 되어 있는 애플리케이션은 보통의 설치 프로그램에서와 달리 특정 위치에 설치해야 하며 사용자가 재량을 발휘할 여지가 없습니다.

이 기사에서는 CD와 인터넷 양쪽 모두를 이용하는 애플리케이션 설치 단계에 대해 설명합니다. 설치 프로세스에 필요한 조건은 다음과 같습니다.

  1. 설치된 애플리케이션은 업데이트를 스스로 확인하고 JWS 캐시와 통합되어야 합니다.
  2. 기존 또는 최신 버전의 자바 없이도 설치 후 즉시 시스템에서 실행할 수 있어야 합니다.
  3. 설치된 애플리케이션에는 인터넷 연결이 필요 없습니다.
  4. 설치된 프로그램은 사용하기 쉬워야 하며 사용자 인터페이스는 간단해야 합니다.

애플리케이션 설치는 보통 일반적인 설치 프로그램을 사용하여 이루어집니다. 그러나 기존의 설치 프로세스에서는 효율성 제고를 위해 JWS를 인식하지 못하는 별도의 애플리케이션을 작성하는 경우가 많았습니다. 따라서 업데이트가 발표될 때마다 사용자는 새 버전을 다운로드하여 설치해야 했습니다. 이와 달리 JWS 애플리케이션은 업데이트된 구성요소만 다운로드하므로 프로세스의 효율성과 신뢰성이 훨씬 더 높습니다. 그러므로 이 기사에서는 JWS 애플리케이션 설치 프로그램에 대해서도 설명하고자 합니다.


JWS 프라이머

자바 웹 스타트가 있으면 JNLP 파일 링크를 통해 자바 애플리케이션을 시작할 수 있습니다. 이 JNLP 파일은 애플리케이션에 대한 진입점 또는 기본 메소드를 설명하는 한편 애플리케이션에서 사용할 리소스를 참조합니다.

JWS 애플리케이션을 시작하면 JVM이 필요한 리소스에 액세스하려고 시도하면서, 경우에 따라 리소스를 업데이트하고 파일을 캐시로 복사합니다. 그 뒤로 이 애플리케이션을 시작하면 JWS가 이 캐시부터 확인하므로 리소스 다운로드 단계를 건너뛸 수 있습니다. 클라이언트 시스템이 오프라인 상태이거나 서버에 연결할 수 없는 경우, JWS는 오프라인 모드로 애플리케이션을 실행합니다.

JWS 시작 파일(JNLP 파일)이 CD에 들어 있는 경우, JWS는 서버에 연결하여 새 파일을 다운로드하려고 시도합니다. 물론 클라이언트 시스템이 온라인 상태일 때 이렇게 하는 것은 CD를 이용한 파일 배포의 취지에 어긋나는 일입니다. 대신에 우리는 앞서 JWS가 애플리케이션을 로드한 것처럼 JWS 캐시를 업데이트할 방법을 찾아야 합니다.


JWS 캐시 업데이트

자바 5 버전의 JWS에는 잘 알려진 -import 옵션이 있습니다. 이것은 특정 위치의 JWS 애플리케이션을 캐시로 가져오는 옵션입니다.

이 위치에 있는 CD 이미지는 보통 웹 서버에 배치되는 것, 즉 JNLP 파일과 이 JNLP 파일에서 참조하는 리소스 및 .jar 파일 등의 사본에 불과합니다. 서블릿을 사용하여 JNLP를 서비스하는 경우, CD 이미지를 실행하려면 생성된 JNLP 파일의 완벽한 스냅샷이 필요합니다.

따라서 다음을 호출하여 JWS 캐시에 CD 이미지를 설치할 수 있습니다.

<JAVA_HOME>/jre/bin/javaws -codebase <CACHE_IMAGE> -import <CACHE_IMAGE>/<XXXX>.jnlp

여기서 <JAVA_HOME>은 새 JVM 또는 기존 JVM의 루트이고, <CACHE_IMAGE>은 CD에서 JWS 애플리케이션의 위치이며, <XXXX>는 애플리케이션 JNLP 파일의 이름입니다. 이 명령을 자동화하고 간단한 GUI로 래핑하는 방법은 나중에 설명하겠습니다.

캐시에 저장된 애플리케이션을 설치하는 동안 JWS는 애플리케이션 시작을 위한 단축키를 바탕 화면이나 메뉴에 설치할지 묻는 메시지를 표시합니다. JWS 설치가 완료된 후 JWS를 다시 호출하여 새로 설치한 애플리케이션을 시작할 수 있습니다.

<JAVA_HOME>/jre/bin/javaws -import <CACHE_IMAGE>/<XXXX>.jnlp

여기서 다시 한 번 CD를 사용합니다. 그러나 이번에는 JWS가 JNLP 파일에서 참조하는 설치 리소스를 사용하게 됩니다. 시스템이 인터넷에 연결되어 있을 때는 통상적인 방법으로 업데이트를 확인한 다음, 애플리케이션을 시작합니다. 네트워크 연결이 설정되지 않았다면 CD에 저장된 상태 그대로 애플리케이션이 시작됩니다.

다음 번에 이 애플리케이션을 시작하는 사용자는 메뉴 또는 바탕 화면의 단축키를 사용할 수 있으며 CD는 이제 필요 없습니다. 아니면 웹 페이지의 링크를 사용하여 애플리케이션을 시작할 수 있습니다. 이 링크는 동일한 URL/JNLP 파일 조합, 예를 들면 해당 웹 사이트에 있던 원래 버전을 가리키는 링크여야 합니다.


JVM 문제

지금까지 설명한 내용에는 허점이 하나 있습니다. 위의 명령을 실행하려면 JVM이 있어야 하는데, 드물기는 하지만 JVM이 설치되어 있지 않거나 시스템 경로에 기본값으로 설정되어 있지 않아서 별도의 조치를 통해 사용 가능한 JVM을 찾아야 하는 경우가 있습니다. 이와 함께 사용자가 CD를 넣으면 설치가 시작되고 그 과정에서 기존 JVM이 있는지 자동으로 확인해야 합니다. 따라서 JVM 확인 프로세스는 다음과 같이 이루어집니다.

  1. 설치 프로그램이 JVM을 확인합니다.
  2. 없으면 JVM을 설치합니다.
  3. 설치 프로그램이 시작되고 사용자 라이센스 정보가 표시됩니다.
  4. 대상 JVM(위 1과 다른 버전을 애플리케이션이 요구하는 경우, 해당 버전)을 설치합니다.
  5. JWS 캐시를 가져옵니다.
  6. JWS 애플리케이션을 시작합니다.

JWS -import 옵션을 사용하기 위한 최소 JVM 버전이 자바 5라는 사실 때문에 몇 가지 문제가 더 발생합니다. 다시 말해, JVM이 설치되어 있고 애플리케이션에 사용할 수 있는 상태이더라도 이 import 옵션을 지정하려면 그 이상의 최신 JVM이 필요하게 됩니다. 둘째, 가져오기 프로세스에는 시간이 약간 걸리는데 애플리케이션을 시작하려면 먼저 이 프로세스를 마쳐야 합니다. 이렇게 실행이 지연되면 일반적인 다른 설치 프로그램과 같은 성능을 얻기가 어려워집니다.

이러한 문제를 고려한 결과, 위의 단계를 자동으로 수행할 수 있는 맞춤 시작형 애플리케이션을 제작하기로 했습니다.


설치 프로그램 실행

설치 프로세스의 실제 과정은 대부분 JWS -import 명령으로 처리되므로, 이 시작 애플리케이션의 주된 임무는 적절한 명령으로 JVM을 찾아 시작한 뒤 사용자에게 작업의 진행 과정을 GUI로 알려주는 것입니다.


JVM 찾기

Windows에서는 시스템 레지스트리의 HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Runtime Environment 키 아래에서 JVM을 찾을 수 있습니다. 이 키는 값이 여러 개일 수 있으며, 따라서 시작 애플리케이션은 레지스트리 항목을 반복하여 점검하면서 사용 가능한 최신 버전의 JVM을 찾아냅니다.

다음 메소드는 최소 및 최대 버전 번호의 인수를 대입하여 JVM 경로를 찾으려고 시도합니다.


private String getInstalledPath(
 
int majorMin, int minorMin, int revMin,
 
int majorMax, int minorMax, int revMax )
 
{
   
String installedPath = null;
   
int latestVersion = 0;

   
String keyRoot =
         
"HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft" +
         
"\\Java Runtime Environment";
   
Vector results = getRegEntries( "\"" + keyRoot + "\" /s" );
   
int numEntries = results.size();
   
for ( int i = 0; i < numEntries; i++ ) {
   
String key = results.get( i++ ).toString();
   
int pos = key.indexOf( "Java Runtime Environment" );
   
if ( pos > 0 ) {
      pos
+= "Java Runtime Environment".length() + 1;
     
String version = key.substring( pos );
     
String parts[] = version.split( "[._]" );
     
int majorVersion, minorVersion, revision;
      majorVersion
= Integer.parseInt( parts[ 1 ] );
     
if ( parts.length > 3 )
        minorVersion
= Integer.parseInt( parts[ 2 ] );
     
else
        minorVersion
= 0;
     
     
if ( parts.length > 4 )
        revision
= Integer.parseInt( parts[ 3 ] );
     
else
        revision
= 0;
       
     
if ((( majorVersion == -1 ) ||
           
( majorVersion >= majorMin )) &&

         
(( majorVersion == -1 ) ||
           
( majorVersion <= majorMax ))) {
       
if ((( minorMin == -1 ) ||
             
( minorVersion >= minorMin )) &&
           
(( minorMax == -1 ) ||
             
( minorVersion <= minorMax ))) {
         
if ((( revMin == -1 ) ||
               
( revision >= revMin )) &&
             
(( revMax == -1 ) ||
               
( revision <= revMax ))) {
           
// Prefer the neweset acceptable version
           
int thisVersion = majorVersion * 10000 +
                minorVersion
* 100 + revision;
           
if ( thisVersion > latestVersion ) {
             
String value = null;
             
while ( i < numEntries ) {
                value
= results.get( i++ ).toString().trim();
               
if ( value.startsWith( "JavaHome" ))
                 
break;
             
}
             
              installedPath
= value.substring(
                value
.indexOf( "REG_SZ" ) +  6 ).trim();
              latestVersion
= thisVersion;
           
}
         
}
       
}
     
}
   
}
 
}

 
return installedPath;
}

위 메소드의 키는 레지스트리 항목을 찾기 위한 키입니다. 레지스트리 값을 찾아주는 API는 여러 가지 있지만, 이 상황에서 가장 실용적인 것은 간단한 명령행 REG QUERY <key>입니다. 여기서 <key>는 쿼리할 레지스트리 경로입니다. 다음 메소드는 명령을 실행한 다음, 출력된 스트림 항목을 읽어 이를 Vector로 반환합니다.


private Vector getRegEntries( String key )
{
 
Vector results = new Vector();

 
try {
   
Process proc = Runtime.getRuntime().exec( "REG QUERY " +
      key
);
   
InputStream is = proc.getInputStream();
   
InputStreamReader isr = new InputStreamReader(is);


   
BufferedReader br = new BufferedReader(isr);
   
String result = "";
   
String line;

   
while (( line = br.readLine()) != null ) {
      line
= line.trim();
      results
.add( line );
   
}

   
return results;
 
}
 
catch ( Exception ex ) {
    message
( language.getString("6") + ex.getMessage() );
    ex
.printStackTrace();
 
}

 
return null;
}

JVM 설치

적당한 JVM을 찾을 수 없으면 CD에서 설치하면 됩니다. 단, 그 위치를 알고 있어야 합니다. 시작 프로그램은 properties 파일을 사용하여 필요한 여러 가지 리소스를 파악한 다음, 이 메커니즘을 통해 JVM 설치 패키지로 보낼 수 있습니다. 여기서도 마찬가지로, JVM 설치를 시작하려면 올바른 명령을 실행할 수 있어야 합니다. 그러나 이번에는 프로세스의 실행 시간이 비교적 길기 때문에 완료될 때까지 조금 기다려야 합니다. 실행(exec)된 프로세스의 waitFor 메소드는 완료될 때까지 스레드를 대기시키는 한편 UI 스레드의 차단을 방지하기 위해 이를 SwingWorker 안에 중첩시킵니다.


private void installJre()
{
 
try {
   
final String javaInstall = (String)props.get(
       
"jre_installer" );
    status
.setText( language.getString("3") );

   
SwingWorker worker = new SwingWorker()
   
{
     
public Object construct()
     
{
       
try {
         
Process process = Runtime.getRuntime().exec(
            workingDir
+ File.separatorChar +
            javaInstall
);
          process
.waitFor();
          exitValue
= new Integer( process.exitValue());
       
}
       
catch ( Exception ex ) {
          exitValue
= new Integer( -1 );
          ex
.printStackTrace();
       
}

       
return exitValue;
     
}

     
public void finished()
     
{
       
int ev = exitValue.intValue();
       
if ( exitValue != 0 ) {
          status
.setText( language.getString("Error:_") +
            exitValue
);
          message
( language.getString("4") );
       
}
       
else {
          installedJrePath
= getInstalledPath( 5, -1, -1,
                                               
5, -1, -1 );
          doInstall
( installedJrePath );
       
}
        status
.setText( "" );
     
}
   
};
    worker
.start();
 
}
 
catch ( Exception ex ) {
    status
.setText( language.getString( "5" ));
    ex
.printStackTrace();
 
}
}

JWS 시작 후 기다리기

JVM을 찾았으면 적절한 명령으로 이를 시작할 수 있습니다. JWS를 호출할 때, 첫 번째 가져오기 호출은 복사 및 완료하는 데 상당한 시간이 걸릴 수 있으므로 위와 같이 waitFor 메소드를 다시 사용합니다. 그러나 두 번째 호출부터는 애플리케이션을 시작하기만 하면 자동으로 처리됩니다. 일단 애플리케이션이 시작되면 시작 애플리케이션은 임무를 다한 것이므로 종료됩니다.


private void launchWebStart( String javaWSPath,
                             
String jnlpPath,
                             
String userDir )
{
 
try {
   
String webStartCommand = "\"" + javaWSPath + "\"" + " -wait
      -codebase file:///"
+ userDir + "\\"+ appDirectory +
     
" -import " + jnlpPath;
   
Process process = Runtime.getRuntime().exec(
      webStartCommand
);
    process
.waitFor();
   
int exitValue = process.exitValue();
   
if ( exitValue != 0 )
      status
.setText( language.getString("7") );
   
else
      status
.setText( language.getString("8") );


   
int rc = JOptionPane.showConfirmDialog( null,
      language
.getString("9"),
      language
.getString("10"),
     
JOptionPane.YES_NO_OPTION );
   
if ( rc == JOptionPane.YES_OPTION )
     
Runtime.getRuntime().exec( javaWSPath + " -offline " +
        jnlpPath
);

    status
.setText( language.getString("11") );
   
SwingWorker worker = new SwingWorker()
   
{
     
public Object construct()
     
{
       
try {
         
Thread.currentThread().sleep( 3000L );
       
}
       
catch ( Exception ex ) {
       
}

       
return null;
     
}

     
public void finished()
     
{
       
System.exit( 0 );
     
}
   
};
    worker
.start();
 
}
 
catch ( Exception ex ) {
    status
.setText( language.getString("12") );
    ex
.printStackTrace();
 
}
}


패키지 작성

설치를 위한 메커니즘은 모두 처리했습니다. 이제 시작 프로그램은 간단한 UI(아래 그림 1 참조)를 사용하여 사용자에게 진행 상황을 알려야 합니다.

사용자 삽입 이미지
그림 1. 설치 프로그램 시작 페이지(큰 그림으로 보려면 이미지 클릭)

UI는 현지화되어 있으며 로고, 애플리케이션 위치, JVM 버전 등을 config.properties 파일에서 구성할 수 있습니다. 소스를 포함한 전체 애플리케이션은 Aria project에서 오픈소스 라이센스로 구할 수 있습니다.

시작 애플리케이션을 제작하고 테스트까지 마친 뒤에는 완벽한 CD 설치 이미지를 작성하는 마지막 단계 하나만 남습니다. 그것이 바로 CD를 넣었을 때 설치를 시작하는 autorun 기능입니다. Windows용 autorun.inf 파일을 작성하는 방법에 대한 자세한 내용은 위키피디아의 Autorun 항목을 참조하십시오. 그러나 이 기능에는 원시 실행 파일이 필요합니다. 이러한 실행 파일을 작성하려면 Launch4J 래퍼를 사용하면 됩니다. Launch4J의 샘플 구성 파일은 다운로드한 소스에 포함되어 있습니다. Launch4J를 실행하면 해당 애플리케이션의 .exe 파일이 작성됩니다. 위에서 설명한 시작 애플리케이션은 자바 애플리케이션이고 사용자 시스템에는 JVM이 없을 수도 있으므로 여기서도 JVM을 래퍼와 함께 번들로 묶어야 합니다.

이렇게 .exe 파일을 작성한 다음, autorun.inf 파일을 작성하여 CD 이미지에 추가하면 됩니다.


[autorun]
open
=XXXX.exe
icon
=xxxx.ico
action
=Open XXXX
label
=My Application


플랫폼 간 문제

위에서 설명한 애플리케이션 시작 프로그램은 Windows에만 있는 몇 가지 기능을 사용하며, 따라서 Windows에서만 실행됩니다. 그러나 이 기사에서 설명한 방법은 여러 플랫폼에서 응용할 수 있는 방법이며, 다른 플랫폼을 사용하는 경우에는 기본 시작 프로그램을 사용할 수 있는지 여부만 확인하면 됩니다. 예를 들어, IzPack에는 몇 가지 플랫폼용의 시작 프로그램이 포함되어 있습니다. 또한 Mac OS X 처럼 문제의 플랫폼에 JVM이 있는 것이 확실하면 JVM에서 직접 시작 애플리케이션을 실행할 수 있으므로 기본 시작 프로그램은 필요가 없습니다.


결론

자바 웹 스타트와 Launch4J를 조합하여 CD를 작성하면 무역 박람회의 관람객 등에게 이 CD를 배포하여 빠르고 쉽게 애플리케이션을 설치하도록 할 수 있습니다. 사용자는 자바 웹 스타트의 전체 업데이트 기능을 사용하여 손쉽게 업데이트를 구할 수도 있고, 인터넷 연결이 불가능한 경우에는 애플리케이션 자체를 이용할 수도 있으므로 양쪽의 장점만 취하는 방법입니다.


참고 자료

Luan O'Carroll은 소프트웨어 개발자로서 Aria 프로젝트에 선임 연구원으로 참여하고 있습니다.


이 글의 영문 원본은
Distributing a Java Web Start Application via CD-ROM
에서 보실 수 있습니다.

크리에이티브 커먼즈 라이센스
Creative Commons License

<출처: http://www.sdnkorea.com/blog/638 >
반응형
반응형

SDN Korea
 
2008년 8월호
케이스 스터디: 솔라리스10에서 DTrace 와 truss 사용하기
  DTrace 와 truss 를 같이 이용하여 문제를 해결에 도움을 받은 실제 경험에 대한 케이스 스터디 입니다.
내장 비트맵 폰트를 활성화 시키는 방법
  트루타잎폰트 중에서 비트맵 폰트를 내장한 폰트들이 있습니다. 그들을 활성화 하는 방법에 대해 알아 봅니다.
플래시 어카이브로 부터 솔라리스10 Branded 존 설치하기
   솔라리스9 brand 를 이용하여 솔라리스10 brand 를 만들고 활요하는 방법에 대해 알아 봅니다
 
병렬프로그래밍에서 레이스 컨디션에 대처하기
  병렬프로그래밍에서 항상 부딪히는 레이스 컨디션의 대처 방법에 대해서 알아 봅니다.
 
CrossBow 시작하기
  OpenSolaris 의 네트워크 가상화 프로젝트인 CrossBow 의 실제 사용 방법에 대해 알아 봅니다.

Sun Tech Days 2008 Seoul

반응형

1> 변수의 초기화란?
    선언된 변수에 최초로 값을 할당하는 것.
   즉, 멤버변수로 선언시 프로그래머가 초기값을 주지 않는경우 자동적으로 값이 할당되는 것.
지역변수는 해당이 안됨.

2> 변수의 종류-- 멤버변수와 지역변수

자바에서 변수로는 멤버변수(=전역변수)와 로컬변수(지역변수) 두 종류가 있다.

멤버변수(Member Variable)
로컬변수(local Variable)
선언부분
클래스내
메소드내
사용범위
해당 클래스내 전체
선언된 해당 메소드내
초기화
자동초기화
안됨.
프로그래머가 직점 초기값을 할당.

3> 기본 데이터형의 초기값

데이터형
기본초기값
boolean
false
char
'\u0000'
byte, short, int, long
0
float
0.0f
double
0.0
object
null

4> 초기화 예제

㉠ Variable_init .java


1 : class Variable_init
2 : {
3 :   public static void main(String[] args)
4 : {
5 :     int x;//x는 main메소드 안에 선언되어 있으므로 지역변수...
6 :     //x=0;
7 :     System.out.println(x);
8 :   }
9 : }


<< 실행 결과 >>

에러가 난다. 그 이유는 변수 x는 main메소드 안에 선언되어 있으므로 지역변수이다. 따라서 자동초기화가 안된다. 따라서 6번라인에서 x에 값을 할당해 주면 에러가 제거된다.


Variable_init2 .java


1 : class Variable_init2
2 : {
3 :    static boolean b;
4 :    static int x;
5 :    static float f;
6 :
7 :   public static void main(String[] args)
8 :   {
9 :       System.out.println("변수 b의 초기값은 : "+b);
10 :     System.out.println("변수 x의 초기값은 : "+x);
11 :     System.out.println("변수 f의 초기값은 : "+f);
12 :    }
13 : }


<< 실행 결과 >>

변수 b의 초기값은 : false
변수 x의 초기값은 : 0
변수 f의 초기값은 : 0.0

변수 b,x,f는 메소드내에 선언된 것이 아니므로 멤버변수들이다. 따라서 프로그래머가 초기값을 할당해 주지 않아도 기본값이 할당된다.

여기서 static이란 키워드가 사용되었는데 이는 객체를 생성하지 않아도 변수를 사용할 수 있게 해주는데 지금은 그렇다는 것만 알고 있자.


클래스 변수와 지역변수, 정적변수등 초기화에 대해 명확히 기억하지 못하고 대충 그럴것이다 생각했었는데
다시한번 보고 넘어가자는 의미에서 정리하였다..

출처:
http://www.it-bank.or.kr/prom/java_main.htm

+ Recent posts