JavaのSwingの画像表示について
Posted: 2015年6月23日(火) 01:28
現在デスクトップマスコットを作っているのですが、パスを指定して画像を読み込めず困っています。
クラスファイルがあるディレクトリと同じディレクトリに画像を置けば正しく表示されるのですが、相対パスを指定して読み込むとうまく読み込めません。
下のコードのImageIcon icon = new ImageIcon(getClass().getResource("illust/sd06.png"));
というところをImageIcon icon = new ImageIcon(getClass().getResource("sd06.png"));
とすれば正しく表示されます
NullPointerExceptionは発生してないので画像自体は読み込めているのかと思い、画像の大きさを調べたところ異常に大きい値となっていました。
実際の大きさは165*400のところ、1154*2797と表示されていました。
ディレクトリ構成は以下のようになっています
jdkは8u45を使用しており、IDEは使っていません。OSはLinux Mint Cinammonです
GitHubのリポジトリです
https://github.com/namachan10777/Pronama/
クラスファイルがあるディレクトリと同じディレクトリに画像を置けば正しく表示されるのですが、相対パスを指定して読み込むとうまく読み込めません。
下のコードのImageIcon icon = new ImageIcon(getClass().getResource("illust/sd06.png"));
というところをImageIcon icon = new ImageIcon(getClass().getResource("sd06.png"));
とすれば正しく表示されます
NullPointerExceptionは発生してないので画像自体は読み込めているのかと思い、画像の大きさを調べたところ異常に大きい値となっていました。
実際の大きさは165*400のところ、1154*2797と表示されていました。
ディレクトリ構成は以下のようになっています
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Dimension;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class Pronama extends JFrame implements Runnable{
private BufferedImage buffer;
private Graphics2D buf;
private Image pronama;
private Pronama(){
setSize(164, 400);
setAlwaysOnTop(true);
setDefaultCloseOperation(3);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();//画面の大きさを取得
setLocation(screen.width - 164,screen.height - 400);//左下に配置
//枠をなくす
setUndecorated(true);
//透明にする
setBackground(new Color(0, 0, 0, 0));
buffer=new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);//バッファイメージの作成
buf = (Graphics2D)buffer.getGraphics();
ImageIcon icon = new ImageIcon(getClass().getResource("illust/sd06.png"));//imageIconを利用してロード
pronama = icon.getImage();//イメージ
System.out.println(pronama.getWidth(this));
System.out.println(pronama.getHeight(this));
setVisible(true);
new Thread(this).start();
}
public void paint(Graphics g){//ここで描画を行う
//バッファーの準備
buf.setBackground(new Color(0, 0, 0, 0));
buf.clearRect(0, 0, getWidth(), getHeight());
//バッファーに描画
buf.drawImage(pronama,0,0,this);
//フレームの描画準備
((Graphics2D)g).setBackground(new Color(0, 0, 0, 0));
g.clearRect(0, 0, getWidth(), getHeight());
//フレームに描画
g.drawImage(buffer, 0, 0, this);
}
public static void main(String[] args) {
new Pronama();
}
@Override
public void run() {
while(true){
repaint();//再描画
try {
Thread.sleep(30l);//30ミリ病停止
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
GitHubのリポジトリです
https://github.com/namachan10777/Pronama/