したがって、最初の問題はリソースの問題です。
アプリケーション内に保存されたリソース (通常は埋め込みリソースと呼ばれます) は、外部リソースのように読み込むことができません。
chick[0] = tk.createImage("stand.png");
"./stand.png"
存在しないファイルが必要です。Class#getResource
代わりに、 APIを介してリソースをロードする必要があります...
chick[0] = tk.createImage(getClass().getResource("/stand.png"));
paint
直面する 2 番目の問題は、最上位のコンテナーをオーバーライドしているという事実です。これは本当にすべきではありません。ダブルバッファリングされていないという事実から始めて、フレームには表示可能な領域内にある装飾があるという事実で終わりましょう。これは、装飾が表面にペイントしたものと重なることを意味します...きれいではありません...
3 番目の問題は、画像の移動先を伝えていないことです。静的です。
ペイントする場所をイメージに伝える何らかの x/y 値が必要です。呼び出す前に、スレッド内の特定の x/y デルタによってこれらの値を変更しますrepaint
...
あなたが持つかもしれない4番目の問題は、AWTを使用しているという事実です...これは一種の時代遅れです。Swing は、二重バッファリングの問題を解決してくれます...私見ですが、より良い選択をするでしょう - Swing に関するドキュメントや例は、今ではもっとたくさんあります;)
私が馬に乗っている間...個人的には、orをお勧めImageIO
します。これは主に、より多くの形式をサポートするためですが、何らかの理由で画像を読み取れない場合にスローされるためです...Toolkit#createImage
ImageIcon
Exception
Swingなら簡単な例がありますが、トピックの実行に問題が発生するので投稿しません...見たい場合はお知らせください
Swingの例で更新
これは、デフォルトのパッケージに埋め込まれた画像を使用しています...

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class ChickenDance {
public static void main(String[] args) {
new ChickenDance();
}
public ChickenDance() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private BufferedImage chicken;
private int xPos;
private int yPos;
private int xDelta = 4;
public TestPane() {
try {
chicken = ImageIO.read(getClass().getResource("/Chicken.png"));
} catch (IOException ex) {
Logger.getLogger(ChickenDance.class.getName()).log(Level.SEVERE, null, ex);
}
Timer timer = new Timer(40, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
xPos += xDelta;
if (xPos + chicken.getWidth() > getWidth()) {
xPos = getWidth() - chicken.getWidth();
xDelta *= -1;
} else if (xPos < 0) {
xPos = 0;
xDelta *= -1;
}
yPos = (getHeight() - chicken.getHeight()) / 2;
repaint();
}
});
if (chicken != null) {
timer.start();
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (chicken != null) {
Graphics2D g2d = (Graphics2D) g.create();
g2d.drawImage(chicken, xPos, yPos, this);
g2d.dispose();
}
}
}
}