Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

画像の読み込み

eclipseを使ってjavaを勉強している初心者です。
プロジェクトと同じところに"1.jpg"という画像を置いているのですが、読み取ることができません
どうすれば読み取ることができますか?ご教授願います。

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.util.*;
import java.io.*;
import javax.imageio.*;

public class R5A_2 extends JPanel {
    Picture p1 = new Picture("1.jpg", 100, 100);
    Picture p2 = new Picture("2.jpg", 100, 100);
    
    ArrayList<Figure> figs = new ArrayList<Figure>();
    Figure sel = null;
    
    public R5A_2(){
        setOpaque(false);
        figs.add(new Circle(Color.green, Color.yellow, 200, 100, 40));
        figs.add(new Circle(Color.BLUE, Color.RED, 220, 80, 30));
        figs.add(new Rect(Color.yellow, Color.GREEN, 240, 60, 80, 40));
        figs.add(new Rect(Color.pink, Color.MAGENTA, 260, 40, 80, 40));
        addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent evt){
                sel = pick(evt.getX(), evt.getY());
            }
            public void mouseReleased(MouseEvent evt){
                sel.repaint();
                if(sel instanceof Circle){
                    ((Circle) sel).resize();
                }
                repaint();
            }
        });
        addMouseMotionListener(new MouseMotionAdapter(){
            public void mouseDragged(MouseEvent evt){
                if(sel == null){ return; }
                sel.moveTo(evt.getX(), evt.getY());
                p1.moveTo(evt.getX(), evt.getY());
                repaint();
            }
        });
        
    }
    private Figure pick(int x, int y){
        Figure p = null;
        for(Figure f: figs){
            if(f.hit(x, y)){ p = f; }
        }
            
        return p;
    }
    public void paintComponent(Graphics g){
        for(Figure f: figs){ 
            f.draw(g);
        }
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        p1.draw(g2d);
    }
    
    public static void main(String[] args){
        JFrame app = new JFrame();
        app.add(new R5A_1());
        app.setSize(800, 800);
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        app.setVisible(true);
    }
    interface Figure{
        public void draw(Graphics g);
        public void repaint();
        public boolean hit(int x, int y);
        public void moveTo(int x, int y);
    }
    static class Picture{
        BufferedImage img;
        
        int xpos, ypos,
            width, height;
        public Picture(String fname, int x, int y){
            
            xpos = x; ypos = y;
            width = img.getWidth();height = img.getHeight();
        }
        public void moveTo(int x, int y) {
            xpos = x; ypos = y;
        }
        public void draw(Graphics g) {
            int x = xpos-width/2, y = ypos-height/2;
            Graphics2D g2d = (Graphics2D)g;
            g.drawImage(img,  x,  y, null);
            try{
                img = ImageIO.read(new File("1.jpg"));
            }catch(Exception ex){
                System.err.println( ex );
            }
            
        }
    }
    static class Circle implements Figure{
        Color col1; Color col2;
        
        int size;
        int xpos, ypos, rad;
        public Circle(Color c1, Color c2, int x, int y, int r){
            col1= c1; col2 = c2; xpos = x; ypos = y; rad = r;
        }
        
        public boolean hit(int x, int y){
            return(xpos-x)*(xpos-x) + (ypos-y)*(ypos-y) <= rad*rad;
        }
        public void moveTo(int x, int y){
            xpos = x; ypos = y;
        }
        public void draw(Graphics g){
            g.setColor(col1);
            g.fillOval(xpos-rad, ypos-rad, rad*2, rad*2);
        }
        public void repaint(){
            col1 = col2;
        }
        public void resize(){
            rad = rad*2;
        }
    }
    static class Rect implements Figure{
        Color col1; Color col2;
        int xpos, ypos, width, height;
        public Rect(Color c1, Color c2, int x, int y, int w, int h){
            col1= c1; col2 = c2; xpos = x; ypos = y; width = w; height = h;
        }
        public boolean hit(int x, int y){
            return xpos-width/2 <= x && x <= xpos+width/2 &&
                    ypos-height/2 <= y && y <= ypos+height/2;
        }
        public void moveTo(int x, int y){
            xpos = x; ypos = y;
        }
        
        public void draw(Graphics g){
            g.setColor(col1);
            g.fillRect(xpos-width/2, ypos-height/2, width, height);
        }
        public void repaint(){
             col1 = col2;
        }
    }
        
        
}

5

回答

7082

閲覧

5件の回答

評価

0

ソースを貼り付けるのは悪いことではないが、問題が再現する、実行可能な最低限のソースにすること。
「読み取ることができません」などと曖昧なことを書かずに、例えば例外ならどんな例外なのか、
そうでないならどんな状況なのか、具体的に書くこと。
質問する前に何を調べ、何をしてみたのかを併記すること。

見た感じ、NullPointerExceptionが発生するしかないようだが。

評価

0

イメージを使ったプログラムを書きたいのですが、どうしても画像の読み込みがうまくいかないんです。

評価

0

最初の回答を読んだ上で書いたのが、それか?
変わってないじゃないか。

評価

0

画像だけの処理を取り出して実行させるとうまくいくのですが、他の動作を混ぜるとなぜかうまくいかなくて

評価

0

だから、もっとしっかりした情報を出しなさいって。
他の動作を混ぜるとと言うなら、例えばそのうまく行く状態から数行ずつ追加しては実行すれば、何を追加したらだめになるかくらい分かるだろう。

ここは何でも回答が得られるサポートセンターではない。
「うまくいかない」からと、丸投げしてはいけない。
自分で試せること、調べられることは何かを考えてみよう。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。