Для загрузки изображения используйте ImageIO.read(File file)
.Это более новый API, более простой в использовании и лучше поддерживаемый.Учебное пособие по загрузке изображений находится здесь http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html, если вам нужно больше указателей.
Вместо этого ваш код будет выглядеть так:
Image img;
public MyCanvas(){
try {
img = ImageIO.read(new File("pengbrew.png"));
} catch (IOException e) {
// Handle exception if there is one.
}
}
Для длинного ответа о том, почемуМетод, который вы использовали, не работал, вероятно, из-за следующего ...
Возможно, ваше изображение находится в правильном месте, и вместо этого Toolkit.createImage () не завершил загрузку изображения до появления кадрарисовать.Toolkit.createImage () возвращает элемент управления обратно в ваше приложение до того, как базовое изображение будет фактически загружено.Обычно вы можете проверить, является ли это проблемой, изменив размер приложения, чтобы оно перекрасилось.Если после нескольких секунд попытки изменить размер приложения изображение отображается, это было связано с тем, что изображение не загружалось во время первых вызовов краски.
Чтобы убедиться, что изображение загружено перед продолжением, необходимо использоватьMediaTracker.Вот пример кода, который гарантирует, что загрузка Image завершена перед его использованием.
Component component = new Component() {};
MediaTracker TRACKER = new MediaTracker(component);
...
Image image = Toolkit.getDefaultToolkit().createImage("imageToLoad.png");
synchronized(TRACKER) {
int id = ++mediaTrackerID;
TRACKER.addImage(image, id);
try {
TRACKER.waitForID(id, 0);
} catch (InterruptedException ex) {
image = null;
}
TRACKER.removeImage(image, id);
}
// Now you can use your image.
Вы увидите такой же код в классе ImageIcon в методе loadImage (Image image).