2016-06-01 1 views
1

3 개의 PNG를 화면으로 이동 시키지만 올바르게 작동하지 않는 간단한 GUI를 만들고 있습니다. 여기 3 개의 PNG를 화면에서 움직이는 간단한 GUI - 올바르게 작동하지 않습니다.

내가 아주 간단한 일상 오류가있을 수 있습니다, 그래서 내가 GUI와 스윙에 새로 온 사람이 코드 내가 여기에 대해 사과 가고 : 내가 컴파일 한

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
public class MovingPictures extends JPanel implements ActionListener 
{ 
private Timer timer; 
Stars star; 
public MovingPictures() 
{ 
    setPreferredSize(new Dimension(800,800)); 

    timer = new Timer(1,this); 
    timer.addActionListener(this); 
    timer.start(); 
} 

public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    g.drawImage(star.getStar(),star.getStarX(),star.getStarY(),null); 
    g.drawImage(star.getStar2(),star.getStar2X(),star.getStar2Y(),null); 
    g.drawImage(star.getStar3(),star.getStar3X(),star.getStar3Y(),null); 
} 

public void actionPerformed(ActionEvent e) 
{ 
    star.up(); 
    star.across(); 
    star.diagonal(); 
    repaint(); 
} 

public class Stars 
    { 
    private Image stars; 
    private Image stars2; 
    private Image stars3; 
    private int starX; 
    private int starY; 
    private int star2X; 
    private int star2Y; 
    private int star3X; 
    private int star3Y; 
    public Stars() 
     { 
     stars = new ImageIcon("star.png").getImage(); 
     stars2 = new ImageIcon("star2.png").getImage(); 
     stars3 = new ImageIcon("star3.png").getImage(); 
     starX = 0; 
     starY = 50; 
     star2X = 100; 
     star2Y = 0; 
     star3X = 0; 
     star3Y = 0; 
    } 

    public void up() 
    { 
     if(starY == 790) 
      starY = 0; 
     else 
      starY += 2; 

    } 

    public void across() 
    { 
     if(star2X == 790) 
      star2X = 0; 
     else 
      star2X +=2; 
    } 

    public void diagonal() 
    { 
     if (star3X == 790) 
     { 
      star3X=0; 
      star3Y =0; 
     } 
     else 
     { 
      star3X += 2; 
      star3Y += 2; 
     } 
    } 

    public int getStarX() 
    { 
     return starX; 
    } 

    public int getStarY() 
    { 
     return starY; 
    } 

    public int getStar2X() 
    { 
     return star2X; 
    } 

    public int getStar2Y() 
    { 
     return star2Y; 
    } 

    public int getStar3X() 
    { 
     return star3X; 
    } 

    public int getStar3Y() 
    { 
     return star3Y; 
    } 

    public Image getStar() 
    { 
     return stars; 
    } 

    public Image getStar2() 
    { 
     return stars2; 
    } 

    public Image getStar3() 
    { 
     return stars3; 
    } 

} 
public static void main(String[] args) 
{ 
    JFrame frame = new JFrame(); 
    frame.setTitle(" Star Field "); 
    frame.setSize(new Dimension(800,800)); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    MovingPictures panel = new MovingPictures(); 
    frame.add(panel); 
    panel.setBackground(Color.BLACK); 
    frame.setVisible(true); 


} 
} 

이 달렸다 프로그램에 도움을 주시면 크게 감사하겠습니다. 변경

+0

* "제대로 작동하지 않습니다."* ** 어떤 일이 ** 일어나는지 설명하십시오! 그것은 이미지를 전혀로드하지 않습니까? 이미지가 이동 하나 화면에 '에코'가 있습니까? 그들은 창문을 부수고 지갑을 훔 칩니 까? .. –

+0

' stars = new ImageIcon ("star.png") .getImage();'1) 애플리케이션 리소스는 배포 시점까지 임베디드 리소스가 될 것이므로 지금 당장 액세스하는 것이 현명하다. . [tag : embedded-resource]는 파일이 아닌 URL로 액세스해야합니다. [info. URL을 구성하는 방법은 임베디드 리소스 페이지 (http://stackoverflow.com/tags/embedded-resource/info)를 참조하십시오. 2) 이미지를 가리키는'URL'을 얻었 으면'ImageIO.read (URL)'을 사용하여 이미지를로드하십시오. 필요에 따라 사용할 수있는'BufferedImage' 또는 다른 유용한 정보를 제공합니다. –

+0

'frame.setSize (새 치수 (800,800)); .. frame.setVisible (true);'이어야합니다 .. .. frame.pack(); frame.setVisible (true);' –

답변

2

하는 것으로 :

Stars star; 

사람 :

Stars star = new Stars(); 

이 인스턴스화되기 전에 참조되는 star 결과 인 NullPointerException을 방지/만들었습니다.

관련 문제