В настоящее время я пытаюсь создать игру для класса, и я решил попробовать загрузить графический интерфейс и отобразить фоновое изображение.GUI продолжает сбой из-за загрузки изображения?
Однако я решил создать одноэлементный ImageLoader-класс с HashMap, который кэширует уже загруженные изображения и сохраняет и/или возвращает новые BufferedImages. Основная цель этого - легко и эффективно получить доступ к спрайтам для нескольких вражеских объектов/ракет, которые будут реализованы в ближайшее время.
Теперь класс игры не является полным, но он должен бежать, что он и делает! Просто не так, как я ожидал.
Я бы ожидал, что он запустится и отобразит графический интерфейс с фоновым изображением, но графический интерфейс отобразится на долю секунды, а затем сработает.
Вот класс игры (рисунок изображения в в методе runGameLoop)
import java.awt.Canvas;
import java.awt.Graphics2D;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
public class Game extends Canvas{
private JFrame frame;
private BufferStrategy strat;
private boolean stillPlaying;
public Game(){
frame = new JFrame("Pirate Game!");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.getContentPane().add(this);
setIgnoreRepaint(true);
frame.setSize(800,600);
setBounds(0,0,800,600);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
this.createBufferStrategy(2);
strat = getBufferStrategy();
stillPlaying = true;
}
public static void main(String[] args) {
Game g = new Game();
g.runGameLoop();
}
private void runGameLoop() {
long initLoop = System.currentTimeMillis();
//while(stillPlaying){
long change = initLoop - System.currentTimeMillis();
initLoop = System.currentTimeMillis();
Graphics2D gfx = (Graphics2D) strat.getDrawGraphics();
BufferedImage sourceImage = ImageLoader.getImageLoader().getImage("resources/Untitled.jpg");
gfx.drawImage(sourceImage,0,0,null);
//}
}
}
А вот класс ImageLoader
import java.awt.image.BufferedImage;
import java.net.URL;
import java.util.HashMap;
import javax.imageio.ImageIO;
public class ImageLoader {
private HashMap<String,BufferedImage> storedImages = new HashMap<String,BufferedImage>();
private static ImageLoader single = new ImageLoader();
public static ImageLoader getImageLoader() {
return single;
}
public BufferedImage getImage(String place) {
BufferedImage image=null;
if (storedImages.containsKey(place))
return storedImages.get(place);
else{
try{
URL location = this.getClass().getClassLoader().getResource(place);
if(location == null)
System.exit(0);
image = ImageIO.read(location);
}
catch(Exception e){
System.out.println(e);
System.exit(0);
}
storedImages.put(place,image);
return storedImages.get(place);
}
}
}
Спасибо за любую помощь ! Я открыт для критики.
Я подозреваю, что ваши изображения не там, где вы думаете, что они ... – MadProgrammer
Что врезаться? Исключение? Каково исключение, трассировка стека и строка в этих файлах, где трассировка стека относится к ... –
В вашем улове выньте 'System.exit' и замените SOP на' ex.printStackTrace(). 'Смотрите, что вы получаете –