Чтобы загрузить изображение, используйте 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. Вот пример кода, чтобы убедиться, что загрузка изображения завершена перед его использованием.
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).
person
Joshua
schedule
01.08.2011