문제

프로그램 시작시 호출되는 메소드가 있으며 항아리를 실행할 때 잘 작동하지만 JNLP 파일을 실행하면 충돌합니다.

public void newImg(String i)
{
    try
    {
        File file = new File(i);
        img = ImageIO.read(file);
    }
}

그건 그렇고 IMG는 완충 지주입니다.

도움이 되었습니까?

해결책

확률은 파일에 제공하는 경로 또는 권한과 일치하지 않습니다. 파일 CTOR를 시도 블록에 넣고 예외를 포착 한 다음 그것이 무엇인지 알아냅니다.

다음과 같이 보일 것입니다.

try {
    File file =  new File(i);
    img = ImageIO.read(file);
} catch (Exception ex) {
    // You probably want to open the java console, or use a logger
    // as a JNLP may send stderr someplace weird.
    Systemm.err.println("Exception was: ", ex.toString());
}

당신이 가진 코드는 예외로 아무것도하지 않습니다.

당신은 그것을보고 싶을 수도 있습니다 예외 스레드 Java 튜토리얼에서.

업데이트

내 의견을보십시오. 나는 방금 무언가를 시도하고 내가 생각하고있는 것을 확인했다 - 코드는 try {} 그리고 아니요 catch 또는 finally 컴파일도하지 않습니다. 이것이 실제로 당신이 함께 일하고 있다고 생각하는 코드라면, 아마도 이전 클래스 파일을로드하고 있었을 것입니다. 이것은 컴파일되지 않았습니다.

$ cat Foo.java 
public class Foo {
     public void tryit() {
         try {
             File f = new File(null);
         }
     }
}
$ javac Foo.java
Foo.java:3: 'try' without 'catch' or 'finally'
         try {
         ^
1 error
$ 

다른 팁

이미지를 올바르게로드하지 않을 수도 있습니다. 파일의 상대 위치를 사용하지 마십시오. 이것은 각 OS마다 다릅니다. 항아리의 이미지는 다음과 같이 올바르게로드해야합니다.

URL url = this.getClass().getResource("image.jpg");
Image img = Toolkit.getDefaultToolkit().getImage(url);

클래스와 동일한 위치에있는 image.jpg라는 파일을로드합니다. 다른 위치에있는 경우 file.pathseparator와 같은 것을 사용할 수도 있습니다.

이 두 가지 방법 중 하나를 사용하여 리소스로로드하십시오.

http://java.sun.com/javase/6/docs/api/java/lang/class.html#getresource(java.lang.string) http://java.sun.com/javase/6/docs/api/java/lang/class.html#getresourceasstream(java.lang.string)

올바른 파일 이름/경로가 있는지 확인하십시오.

파일 시스템에 파일 액세스 권한이 있는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top