画像を変数として設定し、それがどの画像であるかをメインクラスに通知するクラスを作成しようとしています。次に、メインクラスがそれをペイントします。基本的に、存在している間に自分自身を印刷するオブジェクトがたくさんあります。これはを使って実現しましたImageIcon
がBufferedImage
、一度にたくさんの画像を描いたり、動く画像を描いたりするのに適しているようですので、使用は避けたいと思いImageIcon
ます。メインクラス:
package handBasket;
import java.awt.*;
import javax.swing.*;
public class AppStarter extends JPanel
{
static ImageDisplayerTest idt;
public void paintComponent(Graphics g)
{
g.drawImage(idt.demoPann, 0, 0, null);
}
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setSize(800,600);
frame.getContentPane().add(new AppStarter());
frame.setVisible(true);
frame.setTitle("The Great Graphical Achievement");
frame.setResizable(false);
int w = frame.getSize().width;
int h = frame.getSize().height;
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int x = (dim.width-w)/2;
int y = (dim.height-h)/2;
frame.setLocation(x,y);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
idt = new ImageDisplayerTest();
System.out.println(idt.demoPann);
}
}
画像がであった間、これはすべてうまくいきましたImageIcon
。描画する画像のあるオブジェクトは、ファイルを作成し、そのファイルにファイル名を読み込んで、そのファイルを渡そうとしますが、ファイルをBufferedImage
読み取れNullPointerException
ないと言われます。複数のファイルとファイルタイプで試してみましたが、変更はありません。
package handBasket;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageDisplayerTest
{
BufferedImage demoPann;
File loadThis;
public ImageDisplayerTest()
{
loadThis = new File("hp_small.jpg");
try
{
demoPann = ImageIO.read(loadThis);
}
catch (IOException e)
{
System.out.println("wtf");
}
}
}
任意の提案やアドバイスをいただければ幸いです。
- - -編集:
printStackTrace()を実行すると、次の行が表示されます。これらの一部はとにかく表示されるため、printStackTrace()が何を実行するのかわかりません。
フォルダー構造に関しては、すべてが私のプロジェクトフォルダーに含まれるフォルダーにあるsrc/handBasketフォルダーにあります。
run:
javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(ImageIO.java:1301)
at handBasket.ImageDisplayerTest.<init>(ImageDisplayerTest.java:17)
at handBasket.AppStarter.main(AppStarter.java:31)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at handBasket.AppStarter.paintComponent(AppStarter.java:12)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5228)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413)
at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
at javax.swing.JComponent.paint(JComponent.java:1040)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115)
at java.awt.Container.paint(Container.java:1967)
at java.awt.Window.paint(Window.java:3877)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:781)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
BUILD SUCCESSFUL (total time: 15 seconds)