Skip to content

Commit f0ecb32

Browse files
hansonrhansonr
authored andcommitted
Toolkit.getImage(String) fails for URL null
1 parent ea1a1a4 commit f0ecb32

File tree

2 files changed

+90
-1
lines changed

2 files changed

+90
-1
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*
2+
* Copyright (c) 1995, 1996, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation. Oracle designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Oracle in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*/
25+
26+
package sun.awt.image;
27+
28+
import java.io.InputStream;
29+
import java.io.FileInputStream;
30+
import java.io.BufferedInputStream;
31+
import java.io.FileNotFoundException;
32+
33+
public class FileImageSource extends InputStreamImageSource {
34+
String imagefile;
35+
36+
public FileImageSource(String filename) {
37+
SecurityManager security = System.getSecurityManager();
38+
if (security != null) {
39+
security.checkRead(filename);
40+
}
41+
imagefile = filename;
42+
}
43+
44+
final boolean checkSecurity(Object context, boolean quiet) {
45+
// File based images only ever need to be checked statically
46+
// when the image is retrieved from the cache.
47+
return true;
48+
}
49+
50+
protected ImageDecoder getDecoder() {
51+
if (imagefile == null) {
52+
return null;
53+
}
54+
55+
InputStream is;
56+
try {
57+
is = new BufferedInputStream(new FileInputStream(imagefile));
58+
} catch (FileNotFoundException e) {
59+
return null;
60+
}
61+
// Don't believe the file suffix - many users don't know what
62+
// kind of image they have and guess wrong...
63+
/*
64+
int suffixpos = imagefile.lastIndexOf('.');
65+
if (suffixpos >= 0) {
66+
String suffix = imagefile.substring(suffixpos+1).toLowerCase();
67+
if (suffix.equals("gif")) {
68+
return new GifImageDecoder(this, is);
69+
} else if (suffix.equals("jpeg") || suffix.equals("jpg") ||
70+
suffix.equals("jpe") || suffix.equals("jfif")) {
71+
return new JPEGImageDecoder(this, is);
72+
} else if (suffix.equals("xbm")) {
73+
return new XbmImageDecoder(this, is);
74+
}
75+
}
76+
*/
77+
return getDecoder(is);
78+
}
79+
}

sources/net.sf.j2s.java.core/src/swingjs/JSToolkit.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@
6868
import javajs.util.PT;
6969
import sun.awt.AppContext;
7070
import sun.awt.SunToolkit;
71+
import sun.awt.image.FileImageSource;
72+
import sun.awt.image.ToolkitImage;
7173
import swingjs.api.Interface;
7274
import swingjs.api.JSFileHandler;
7375
import swingjs.api.js.HTML5Applet;
@@ -597,7 +599,15 @@ private JSImagekit getImagekit() {
597599
public Image getImage(String filename) {
598600
if (filename.indexOf("/") != 0)
599601
filename = "../" + filename;
600-
return createImage(JSToolkit.class.getResource(filename));
602+
Image img = null;
603+
try {
604+
img = createImage(JSToolkit.class.getResource(filename));
605+
} catch (Exception e) {
606+
}
607+
if (img == null)
608+
img = new ToolkitImage(new FileImageSource(filename));
609+
return img;
610+
601611
}
602612

603613

0 commit comments

Comments
 (0)