私はまだJavaにかなり慣れていませんが、これは起こらないはずだと確信しています。私の paintComponent メソッドに奇妙な論理エラーがあり、画像が正しく描画されません。通常、これは問題にはならず、回避する方法を見つけることができました。ただし、問題は常に存在するとは限りません。IDE を閉じて再度開く場合と同様に、一度に 1 行ずつコメントを付けたりコメントを外したりすると、問題が回避されることがあります。(Eclipse.) 何が原因で、それを避けるために何ができるでしょうか?
これが私の方法です:
public void paintComponent(Graphics g){
g.drawImage(titlebg, 0, 0, null);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(300, 250, 300, 50);
//g.fillRect(400, 400, 300, 50);
g.drawImage(ccground, 0, 0, null);
}
編集: setColor および fillRect メソッドのコメントが外されている場合、drawImage メソッドは機能しません。2人だけだとうまくいかないこともあります。時々彼らはそうします。
編集 2: 画像への唯一の他の呼び出しは、それらを初期化する次のコードにあります。
Toolkit tk = Toolkit.getDefaultToolkit();
public Image retrieveImage(String x){
URL y = this.getClass().getResource(x);
Image img = tk.getImage(y);
return img;
}
これは次のように参照されています。
public void loadImages(){
ccground = rl.retrieveImage("\\Chrysaline Caverns ground tile.png");
titlebg = rl.retrieveImage("\\Title Screen.png");
}
paintComponent メソッドと同じクラスにあります。
編集 3: スタック トレース。
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at javax.swing.JFrame.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at gui.Main.createGui(Main.java:32)
at gui.Main$1.run(Main.java:21)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Main.class
public class Main extends JFrame{
static Window w;
JFrame f;
Image ccground;
Main(){
SwingUtilities.invokeLater(new Runnable(){
public void run() {
createGui();
}
});
}
public static void main(String[] args){
w = new Window();
}
public void createGui(){
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(w);
f.pack();
f.setVisible(true);
f.setBackground(Color.BLACK);
}
}
編集 4: Window.java
public class Window extends JPanel{
Main m;
ResourceLoader rl;
Image ccground;
Image titlebg;
public Window(){
rl = new ResourceLoader();
m = new Main();
loadImages();
}
public Dimension getPreferredSize(){
return new Dimension(800, 592);
}
public void loadImages(){
ccground = rl.retrieveImage("\\Chrysaline Caverns ground tile.png");
titlebg = rl.retrieveImage("\\Title Screen.png");
}
public void paintComponent(Graphics g){
g.drawImage(titlebg, 0, 0, null);
g.setColor(Color.LIGHT_GRAY);
g.fillRect(300, 250, 300, 50);
//g.fillRect(400, 400, 300, 50);
g.drawImage(ccground, 0, 0, null);
}
}