게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
자바 오류나는것좀 봐주시면 감사하겠습니다 ..
게시물ID : programmer_4472짧은주소 복사하기
작성자 : coconuts
추천 : 0
조회수 : 1330회
댓글수 : 9개
등록시간 : 2014/07/10 19:50:55
옵션
  • 본인삭제금지
사진을넣어서 퍼즐을 맞추는 프로그램을 짜고 있습니다 ..
 
이것저것 구글링 해보고 하면서 이렇게 만들었는데 실행시키면
 
Exception in thread "main" java.lang.NullPointerException
 at javax.swing.ImageIcon.<init>(ImageIcon.java:217)
 at puzzle.PuzzleGame.<init>(PuzzleGame.java:42)
 at puzzle.PuzzleGame.main(PuzzleGame.java:78)
이렇게 오류가 뜨네요.. ㅜㅜ ..
 
뭐가 문제인지 알려주시면 정말감사하겠습니다 ..
 
 
---------
package puzzle;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class PuzzleGame extends JFrame implements ActionListener {
 
 private JPanel centerPanel;
 private JButton button;
 private JLabel label;
    private Image source;
    private Image image;
    int[][] pos;
    int width, height;
   
    public PuzzleGame() {
     
     pos = new int[][]{
       {0, 1, 2, 3},
       {4, 5, 6, 7},
       {8, 9, 10, 11},
       {12, 13, 14, 15} 
     };
     
        centerPanel = new JPanel();
        centerPanel.setLayout(new GridLayout(4, 4, 0, 0));
       
        ImageIcon sid = new ImageIcon(PuzzleGame.class.getResource("picture.jpg"));
        source = sid.getImage();
       
        width = sid.getIconWidth();
        height = sid.getIconHeight();
       
        add(Box.createRigidArea(new Dimension(0,5)), BorderLayout.NORTH);
        add(centerPanel, BorderLayout.CENTER);
       
        for(int i=0;i<4;i++){
         for(int j=0;j<3;j++){
          if(j==2 && i==3){
           label = new JLabel("");
           centerPanel.add(label);
          }else {
           button = new JButton();
           button.addActionListener(this);
           centerPanel.add(button);
           image = createImage(new FilteredImageSource(source.getSource(),
                            new CropImageFilter(j*width/3, i*height/4,
                                (width/3)+1, height/4)));
           button.setIcon(new ImageIcon(image));
          }
         }
        }
       
        setSize(325,275);
        setTitle("퍼즐게임");
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
       
    }
   
    public static void main(String[] args) {
  new PuzzleGame();
 }
   
    public void actionPerformed(ActionEvent e) {
     JButton button = (JButton) e.getSource();
        Dimension size = button.getSize();
       
        int labelX = label.getX();
        int labelY = label.getY();
        int buttonX = button.getX();
        int buttonY = button.getY();
        int buttonPosX = buttonX / size.width;
        int buttonPosY = buttonY / size.height;
        int buttonIndex = pos[buttonPosY][buttonPosX];
       
        if (labelX == buttonX && (labelY - buttonY) == size.height ) {
            int labelIndex = buttonIndex + 3;
            centerPanel.remove(buttonIndex);
            centerPanel.add(label, buttonIndex);
            centerPanel.add(button,labelIndex);
            centerPanel.validate();
       }
       
        if (labelX == buttonX && (labelY - buttonY) == -size.height ) {
            int labelIndex = buttonIndex - 3;
            centerPanel.remove(labelIndex);
            centerPanel.add(button,labelIndex);
            centerPanel.add(label, buttonIndex);
            centerPanel.validate();
       }
       
        if (labelY == buttonY && (labelX - buttonX) == size.width ) {
            int labelIndex = buttonIndex + 1;
            centerPanel.remove(buttonIndex);
            centerPanel.add(label, buttonIndex);
            centerPanel.add(button,labelIndex);
            centerPanel.validate();
       }
       
        if (labelY == buttonY && (labelX - buttonX) == -size.width ) {
            int labelIndex = buttonIndex - 1;
            centerPanel.remove(buttonIndex);
            centerPanel.add(label, labelIndex);
            centerPanel.add(button,labelIndex);
            centerPanel.validate();
       }
    }
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호