2013-08-06 2 views
0
나는 이클립스를 사용하고

내 코드를 찾을 수 없습니다 : -이미지 파일, 자바

package arrowRecog; 

import org.sikuli.api.*; 
import java.io.File; 
import arrowRecog.res.*; 

public class FocusTrain 
{ 
    public static void main(String[] args) throws Exception 
    { 
     Target oneDown = new ImageTarget(new File("arrowRecog.res","1down.jpg")); 
    } 
} 

트리 :

http://i1316.photobucket.com/albums/t601/Preformer/tree_zps1e15285b.jpg

예외 :

http://i1316.photobucket.com/albums/t601/Preformer/error_zps05bc7502.jpg

답변

0

왜 소스 코드가 아닌 리소스를 src 디렉토리에 넣을지 전혀 모르겠습니다. 여기서 디렉토리는 Eclipse에서 패키지로 해석되므로 "folder.subfolder"형식으로 표시됩니다. File 클래스는 Java 클래스 경로 형식이 아닌 파일 시스템을 사용하므로 "arrowRecog.res"는 "res"라는 하위 디렉토리가있는 "arrowRecog"디렉토리로 해석되지 않지만 "arrowRecog.res"디렉토리는 검색합니다. 존재하지 않는다. 즉, 도트는 경로 분리 문자로 사용되지 않고 디렉토리 이름의 일부로 사용됩니다.

또한 상대 경로를 사용하기 때문에 작업 디렉토리와 관련이 있습니다. 작업 디렉토리는 Eclipse에서 프로젝트의 기본 디렉토리입니다 (올바르게 기억한다면). 따라서 경로에 "src"디렉토리가 누락되었습니다.

new File("arrowRecog/res/1down.jpg") 

new File("src/arrowRecog/res/1down.jpg") 

또는

은 아마 당신의 작업 디렉토리 설정 방법에 따라 작동합니다.

가장 좋은 점은 (고해상도 예를 들어라고도 함) SRC 디렉토리 옆에 새로운 디렉토리를 생성하고 모든 이미지가 이동합니다.

5

문제는 문자열 리터럴의 "\ 1"부분입니다. 백 슬래시 뒤에 1이 오는 것은 아닙니다. 이것은 8 진수 이스케이프 시퀀스이며 U + 0001을 생성합니다. 당신이 목표로 한 문자열을 얻으려면, 당신이 원하는 :

Target oneDown = new ImageTarget(new File("arrowRecog.res\\1down.jpg")); 

또는 더 나은 - 휴대 성 :

Target oneDown = new ImageTarget(new File("arrowRecog.res/1down.jpg")); 

또는 더 나은 :

Target oneDown = new ImageTarget(new File("arrowRecog.res", "1down.jpg")); 

(실제로, 모든 플랫폼의 I를 Java를 사용하여 /을 디렉토리 구분자로 사용했지만 두 개의 문자열을 사용하는 File 생성자를 사용하는 것은 여전히 ​​좋은 생각입니다.

+0

제 3의 수정을 시도했지만, 나는 여전히 정확히 같은 예외를 얻습니다. 내 나무를 확인할 수 있습니까? 그것의 나의 약점 – Preformer

+0

@Preformer : 아니, 당신은 똑같은 예외를 * 정확히 * 얻지 못할 것이다. 게시 한 스크린 샷을보고 예외가 발생한 경우 - 관련 이름을 살펴보십시오 ("down.jpg"직전). 이제 파일을 코드를 실행중인 위치와 관련하여 올바른 위치에 배치하지 않은 경우에는 별개의 문제입니다. –

+0

예, 동일합니다. 이제는 내 코드, 트리 및 예외를 보았습니다. jpeg 파일은 어디에 있어야할까요? – Preformer