저는 이렇게 해결했습니다. 이클립스에서

Window -> Preferences -> Android -> DDMS -> "ADB connection time out (ms)"의 값을 늘려준다.

apk 용량이 늘어나면 접속 시간을 늘려줘야 합니다.
by danguria 2011. 1. 13. 03:25

프로젝트 여러 개가 묶여있는 곳이 워크스페이스(Workspace)입니다. 이클립스를 처음 시작할 때 물어보는 경로가 워크스페이스의 기준 위치입니다. 재밌는 것은 이클립스의 설정값들이 여기에 저장됩니다. 그래서 이클립스의 버전을 바꿔도 같은 워크스페이스를 부르면 설정값들을 그대로 보존하고 있죠. 이클립스 업그레이드 하기가 쉬운 편입니다.
워크스페이스를 새로 지정하면 모든 설정값들을 다시 세팅해주어야 됩니다. 설정값의 내보내기 가져오기 기능은 나중에 알아보겠습니다. 팀에서 필요한 기능이니까요.

오늘 은 워크스페이스를 바꾸는 것을 말씀드리려합니다.

사용자 삽입 이미지

Switch Workspace


간단합니다. 메뉴에서 File > Switch Workspace 를 클릭하면 이제까지 작업했던 워크스페이스들이 나타납니다. 저는 4개를 쓰고 있네요. Other... 메뉴를 통해서 새로운 워크스페이스를 지정할 수도 있습니다.

너무 뚱뚱하게 워크스페이스를 가져가지 마시고, 가볍게 구성해주세요. 컴퓨터가 욕합니다. 주인이 개념없다고. ^^;

by danguria 2011. 1. 12. 22:43

Failed to create java virtual machine!

다음과 같은 창이 뜨면서 이클립스가 실행 되지 않으면 이렇게 해봅니다.


t.bmp

  • 이클립스 설치 폴더안에 보면 eclipse.ini란 파일이 있습니다. 편집기로 열어서 

-vm
C:\Program Files\Java\jdk1.6.0_20\bin\javaw.exe

을 아래와 같이추가해줍니다.

  1. -startup
    plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
    --launcher.library
    plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503
    -product
    org.eclipse.epp.package.jee.product
    --launcher.defaultAction
    openFile
    --launcher.XXMaxPermSize
    256M
    -showsplash
    org.eclipse.platform
    --launcher.XXMaxPermSize
    256m
    --launcher.defaultAction
    openFile
    -vm
    C:\Program Files\Java\jdk1.6.0_20\bin\javaw.exe

    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Xms40m

    -Xmx512m



 ---------------------------------------------------------------------------------


by danguria 2011. 1. 12. 22:41
오늘 프로젝트를 정리 하면서 이미지를 jar안에 넣는 작업을 했습니다.

netbeans에서 프로젝트를 하고 있었으므로 jar파일 만드는 것은 알아서 해주지만, 이미지를 넣기

위해서 .class파일들이 모여 있는 곳에 이미지를 옮기고 코드를 수정했습니다.

하지만!!!

동작을 하지 않는 것입니다..

jar파일에 있는 리소스를 가져 오기 위해서 ClassLoader의 getResource 

메소드를 사용해야 합니다.

기존에 직접 파일의 경로로 가서 파일을 직접 읽어 왔던 코드를 jar파일에 있는 것을 

classloader를 통해 읽어 

오는 코드로 변경했는데 동작을 하지 않아서 고생을 하고 원인을 찾아 해매 두시간을 헤매고 있었습니다.

결국 일일이 어디서 문제가 있는지 디버깅 코드를 넣어 가면서 테스트를 하는데 

원인을 밝혀 냈고, 화가 나더라구요...

기존의 코드에 이미지를 얻어 오기 위한 경로와 파일 이름에는 대소 문자를 구분 하지 않았는데 

jar파일 안에 있는 리소스를 얻기 위한 경로 지정해는 대소 문자를 구분 하고 띄어 쓰기는 되지 않는 것을 밝견

했습니다.

결국 문제를 해결했지만... 참.. 찜찜 하네요..

왜이렇게 서로 다르게 만들어서 힘들게 하는 것일 까요...

그리고 jar파일에 이미지를 넣지 않을때와 넣을때..

두 버전을 유지하는 것이 어렵네요.. (이건 제가 아직 잘 몰라서 그런것 같지만..ㅠ)

아무튼 올만에 삽질 좀 했습니다.ㅋ
by danguria 2010. 1. 5. 18:29

1.     If

-       일반적인 경우에 대한 코드를 먼저 작성한 다음 특별한 경우를 작성한다.

-       동치에 대해서 정확하게 이동하도록 한다.

-       정상적인 경우를 else가 아니라 if문 다음에 입력한다.

 

수많은 오류를 아무렇게나 처리하는 비주얼 베이직 예제

OpenFile( inputFile, status )

If (status = Status_Error) Then

           errorType = FileOpenError

Else

           ReadFile( inputfile, fileData, status )

           If( status = Status_Success ) Then

                     SummarizeFileData( fileData, summaryData, status)

                     If( status = Status_Error ) Then

                                errorType = ErrorType_DataSummaryError

                     Else

                                PrintSummary(summaryData)

                                SaveSummaryData(summaryData, status)

                                If(status = status_Error) Then

                                          errorType = ErrorType_SummarySaveError

                                Else

                                          UpdateAllAccounts()

                                          EraseUndoFile()

                                End If

                     End If

           Else

                     ErrorType = ErrorType_FileReadError

           End If

End If

 

수많은 오류를 조직적으로 처리하는 비주얼 베이직 예제

OpenFile( inputFile, status )

If (status = Status_Success) Then

           ReadFile( inputfile, fileData, status )

           If( status = Status_Success ) Then

                     SummarizeFileData( fileData, summaryData, status)

                     If( status = Status_Success ) Then

                                PrintSummary(summaryData)

                                SaveSummaryData(summaryData, status)

                                If(status = status_Success) Then

                                          UpdateAllAccounts()

                                          EraseUndoFile()

                                errorType = ErrorType_None

                     Else

                                errorType = ErrorType_dataSummaryError

                     End If

           Else

                     errorType = ErrorType_FileReadError

           End If

Else

           errorType = ErrorType_FileOpenError

End If

 

-       If 절 다음에 의미 있는 명령문을 작성한다.

If 절이 null인 자바 예제

If( someTest)

           ;

else{

           // 작업 처리

          

}

Null if 절이 변환된 자바 예제

If( !someTest){

           // 작업 처리

          

}

주석이 작성되어 유용한 else 절이 포함된 자바 예제

// 만약 Color 가 타당하다면

If((COLOR_MIN <= color && color <= COLOR_MAX){

           // 작업 처리

          

}else{

           // color가 타당하지 않다면

           // 화면에 쓰이지 않는다. – 명령을 무시한다.

연속적인 if-then-else

문자를 분류하기 위해서 일련의 if-then-else를 사용하는 C++예제

if( inputCharacter < SPACE ){

           characterType = CharacterType_ControlCharacter;

}

else if (

           inputCharacter == ‘ ‘ ||

           inputCharacter == ‘,‘ ||

           inputCharacter == ‘.‘ ||

           inputCharacter == ‘!‘ ||

           inputCharacter == ‘(‘ ||

           inputCharacter == ‘)‘ ||

           inputCharacter == ‘:‘ ||

           inputCharacter == ‘;‘ ||

           inputCharacter == ‘?‘ ||

           inputCharacter == ‘-‘

){

           characterType = CharacterType_Punctuation;

}

else if( ‘0’ <= inputCharacter && inputcharacter <= ‘9’ ){

           characterType = CharacterType_Digit;

}

else if(

           (‘a’ <= inputCharacter && inputCharacter <= ‘z’ ) ||

           (‘A’ <= inputCharacter && inputCharacter <= ‘z’)

           ){

           characterType = CharacterType_Letter;

}

복잡한 테스트를 불린 테스트 호출로 단순화 시킨다.

불린 함수 호출을 사용한 일련의 if-then-else C++예제

if( IsControl(inputCharacter)){

           characterType = CharacterType_ControlCharacter;

}

else if( IsPunctuation( inputCharacter)){

           characterType = CharacterType_Punctuation;

}

else if( IsDigit( inputCharacter)){

           characterType = CharacterType_Digit;

}

else if( IsLetter(inputcharacter)){

           characterType = CharacterType_Letter;

}

가장 흔한 경우를 앞에 놓는다.

가장 흔한 경우를 제일 먼저 테스트 하는 C++ 예제

if( IsLetter(inputcharacter)){

           characterType = CharacterType_Letter;

}

else if( IsPunctuation( inputCharacter)){

           characterType = CharacterType_Punctuation;

}

else if( IsDigit( inputCharacter)){

           characterType = CharacterType_Digit;

}

else if( IsControl(inputCharacter)){

           characterType = CharacterType_ControlCharacter;

}

모든 경우를 다루었는지 확인한다.

오류를 잡기 위해서 기본(Default)경우를 사용한 C++예제

if( IsLetter(inputcharacter)){

           characterType = CharacterType_Letter;

}

else if( IsPunctuation( inputCharacter)){

           characterType = CharacterType_Punctuation;

}

else if( IsDigit( inputCharacter)){

           characterType = CharacterType_Digit;

}

else if( IsControl(inputCharacter)){

           characterType = CharacterType_ControlCharacter;

}

else{

           DisplayInternalError(“예상치 못한 문자가 발견되었습니다.”);

}

만약 언어가 지원한다면, if-then-else 체인 대신 다른 구조를 사용한다.

if-then-else 체인 대신 case문을 사용한 비주얼 베이직 예제

Select Case inputCharacter

           Case “a” To “z”

                     characterType = CharacterType_Letter

           Case “ “, “,”, “.”, “!”, “(“, “)”, “:”, “;”, “?”, “-“

                     characterType = CharacterType_Punctuation

Case “0” To “9”

                     characterType = CharacterType_Digit

 

Case FIRST_CONTROL_CHARACTER To LAST_CONTROL_CHARACTER

                     characterType = CharacterType_Control

End Select

 

 

2.     Case

가장 효율적인 case 순서의 선택

알파벳 순으로 또는 숫자 순으로 case를 나열한다.

가장 정상적인 경우를 앞에 놓는다.

빈도에 따라서 case를 나열한다.

Case 문 사용 팁

case문이 하는 일을 간단하게 유지한다.

Case문에서 사용하기 위해서 포니(phony)변수를 채우지 않는다.

포니 case 변수를 생성한 자바 예제 나쁜 습관

action = usercommand[0];

switch( action ){

           case ‘c’:

                     Copy();

                     Break;

           Case ‘d’:

                     DeleCharacter();

                     Break;

           Case ‘f’:

                     Format();

                     Break;

           Case ‘h’:

                     Help();

                     Break;

          

           Default:

                     HandleUserInputError( Errortype.InvalidUserCommand);

}

 

포니 case변수 대신 if-then-else를 사용한 자바 예제 좋은 습관

if( userCommand.equals( COMMAND_STRING_COPY)){

           Copy();

}else if(userCommand.equals( COMMAND_STRING_DELETE)){

           DeleteCharacter();

}else if(userCommand.equals( COMMAND_STRING_FORMAT)){

           Format();

}else if(userCommand.equals( COMMAND_STRING_HELP)){

           Help();

}

else{

           HandleUserInputError(ErrorType_InvalidcommandInput);

}

 

          

 

 

타당한 기본 값을 찾고자 하는 경우에만 default 절을 사용한다.

오류를 검출하기 위해서 default절을 사용한다.

오류를 검출하기 위해서 default 절을 사용하는 자바 예제 좋은 습관

switch( commandShortcutLetter ){

           case ‘a’:

                     PrintAnnualReport();

                     Break;

           Case ‘p’:

                     // 아무것도 수행할 필요가 없지만, 이 경우도 고려하였다.

                     Break;

           Case ‘q’:

                     PrintQuarterlyReport();

                     Break;

           Case ‘s’:

                     PrintSummaryReport();    

                     Break;

           Default:

                     DisplayInternalError(“내부 오류 905: 고객 지원실에 …”);

}

 

 

C++과 자바에서는 case문의 끝에서 아래로 내려가는 경우를 피한다.

Case 문을 악용한 C++예제

switch( InputVar){

           case ‘A’: if(test){

                     // 명령문1

                     // 명령문2

           Case ‘B’: // 명령문3

                     // 명령문4

                    

                     }

          

                     Break;

          

}

 

C++에서는 case 문의 끝에서 분명하고 확실하게 아래로 떨어지는 것(flow-through)을 확인해야 한다.

Case 문 끝에서 아래로 떨어지는 코드를 문서로 설명한 C++예제

sitch( errorDocumentationLevel){

           case DocumentationLevel_Full:

                      DisplayErrorDetails(errorNumber);

                     // FALLTHROUGH – 완전한 문서는 요약된 문서도 출력

 

           Case DocumentationLevel_Summary:

                     DisplayErrorSummary(errorNumber);

                     // FALLTHROUGH – 요약된 문서는 요류 번호도 출력한다.

           Case DocumentationLevel_NumberOnly:

                      DisplayErrorNumber(errorNumber);

                     Break;

           Default:

                     DisplayInternalError(“내부 오류 905: 고객 지원실에…”);

}

by danguria 2009. 10. 21. 21:36

 

1.     순서가 중요한 명령문

 

명령문의 순서가 중요한 자바 예제

Data = ReadData();

Result = CalculateResultsFromData( date );

PrintResults( results );

 

명령문의 순서가 중요하지만 덜 분명한 자바 예제

revenue.ComputeMonthly();

revenue.ComputeQuarterly();

revenue.ComputeAnnual();

 

명령문의 순서가 중요한 자바 예제

Data = ReadData();

Result = CalculateResultsFromData( date );

PrintResults( results );

 

명령문의 순서 의존성이 감추어져 있는 비주얼 베이직 예제

ComputeMarketingExpense

ComputeSalesExpense

ComputeTravelExpense

ComputePersonnelExpense

DisplayExpenseSummary

 

 

의존성이 분명하도록 코드를 구성한다.

의존성이 분명하도록 루틴의 이름을 작성한다.

데이터가 순서의 의존성을 말해주는 비주얼 베이직 예제

InitializeExpenseData( expenseData )

ComputeMarketingExpense( expenseData )

ComputeSalesExpense( expenseData )

ComputeTravelExpense( expenseData )

ComputePersonnelExpense( expenseData )

DisplayExpenseSummary( expenseData )

 

 

데이터와 루틴 호출이 순서의 의존성을 말해주는 비주얼 베이직 예제

expenseData = InitializeExpenseData( expenseData )

expenseData = ComputeMarketingExpense( expenseData )

expenseData = ComputeSalesExpense( expenseData )

expenseData = ComputeTravelExpense( expenseData )

expenseData = ComputePersonnelExpense( expenseData )

DisplayExpenseSummary( expenseData )

 

 

데이터가 순서의 의존성을 암시하지 않는 비주얼 베이직 예제

ComputeMarketingExpense ( marketingData )

ComputeSalesExpense ( salesData )

ComputeTravelExpense ( travelData )

ComputePersonnelExpense ( personnelData)

DisplayExpenseSummary(

 marketingData, salesData, travelData, personnelData)

 

 

의존성이 분명하지 않은 부분은 주석으로 문서화한다.

명령문의 순서 의존성이 감추어져 있지만 주석으로 이를 분명히 한 비주얼 베이직 예제

// 지출 데이터를 계산한다. 각 루틴들은 멤버 데이터 expenseData에 접// 근한다. DisplayExpenseSummary는 다른 루틴들에서 계산된 데이터에 // 의존하기 때문에 마지막에 호출되어야 한다.

InitializeExpenseData

ComputeMarketingExpense

ComputeSalesExpense

ComputeTravelExpense

ComputePersonnelExpense

DisplayExpenseSummary

 

 

어설션이나 오류 처리 코드로 의존성을 검사한다.

2.     순서가 중요하지 않는 명령문

코드를 하향식으로 읽을 수 있도록 작성하기

코드를 이리 저리 봐야 하는 좋지 않은 C++ 예제

MarketingData marketingData;

SalesData salesData;

TravelData travelData;

 

travelData.ComputeQuarterly();

salesData.ComputeQuarterly();

marketingData.ComputeQuarterly();

 

salesData.ComputeAnnual();

marketingData.ComputeAnnual();

travelData.ComputeAnnual();

 

salesData.Print();

travelData.Print();

marketingData.Print();

하향식으로 읽을 수 있도록 순차적으로 잘 작성된 C++예제

MarketingData marketingData;

marketingData.ComputeQuarterly();

marketingData.ComputeAnnual();

marketingData.Print();

 

SalesData salesData;

salesData.ComputeQuarterly();

salesData.ComputeAnnual();

salesData.Print();

 

TravelData travelData;

travelData.ComputeQuarterly();

travelData.ComputeAnnual();

travelData.Print();

 

연관된 명령문 그룹화하기

 

by danguria 2009. 10. 21. 18:11

요즘들어 윈도우의 GUI환경을 벗어나 옛날로 돌아가고 싶다는 생각이 듭니다.

그래서 인지 cmd 환경에서 GUI환경 못지 않는 편리함(?!) 을 얻고자 고민하던중

subst라는 명령을 발견했습니다.

폴더를 잘 정리 하면 폴더 안에 폴더, 그안에 다시 폴더... 이런식으로 깊이가 깊어지는데요..

그곳에 접근할때 마다 일일이 커맨드를 치는것도 힘들고 GUI가 아니므로 기억하기도 힘들지요..

그래서 help쳐서 명령어를 구경하던중 가상의 드라이버를 만들어 실제 내용이 들어있는 경로로 바로 갈 수 있다는 것을 알게

되었습니다.

사용법은 간단합니다. subst help를 치면 사용법이 나오며 그것을 보면 그대로 따라 하실 수 있을겁니다.




by danguria 2009. 1. 7. 17:55
| 1 |