.jnlp 파일을 실행하면 Java 이미지가 엉망입니다.
문제
프로그램 시작시 호출되는 메소드가 있으며 항아리를 실행할 때 잘 작동하지만 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)
올바른 파일 이름/경로가 있는지 확인하십시오.
파일 시스템에 파일 액세스 권한이 있는지 확인하십시오.