이것은 아마도 바보 같은 질문이 될 것입니다. 그러나 저는 초심자이므로 제 영혼에 자비를 베푸고 있습니다. :) 내 문제는 내가 모든 게임을 표시하는 IFrame 인 게임 페이지라는 클래스가 있다는 것입니다.그래픽 드로잉 이미지 주사위 놀이 게임
public void paintComponent(Graphics page)
{
super.paintComponent(page);
page.drawImage(image, 0, 0, null);
}
이미지 보드의 이미지입니다 내가 이런 식으로 그것을 얻을 :
image = ImageIO.read(new File("pics/board.png"));
그 안에 은 내가 잘 사용 자체를 페인트 보드의 그림을 포함 보드라는 클래스를 가지고 좋아, 괜찮아. 보드 내부에는 "슬롯"유형의 2 차원 배열이 있는데, 슬롯은 내가 쓴 다른 클래스입니다. WhitePiece의 스택 또는 Stack of BlackPiece 이 클래스는 보드에 검정색 또는 흰색 조각을 나타내는 클래스입니다.
그래서 보드 클래스에는 주사위 놀이의 시작 위치로 배열하여 모든 슬롯을 국한시키는 방법 인 리셋 보드가 있습니다.
검은 색과 흰색 조각이 다음과 같은 형식의 이미지를 가지고 있습니다. pic = ImageIO.read (새 파일 ("pics/whitePiece.png")));
이제는 내부 리셋 보드에서 Slot 클래스의 drawSlot 메서드를 호출 할 때 생각이 나쁘다. 나는 이것을 다음과 같이 부른다. 처음으로 drawBoard를 호출한다 : drawBoard (board);
는 여기에 drawBoard입니다 :
public void drawBoard(Slot[][] board) throws IOException{
for(int i=0;i<2;i++){
for(int j=0;j<12;j++){
board[i][j].drawSlot(getGraphics());
}
}
}
을 여기에 problemtic 방법 : drawSlot :
public void drawSlot(Graphics g) throws IOException{
if(type == SlotType.empty){
System.out.println("no type selected slot is empty Slot Number"+slotNumber);
}else
if(type == SlotType.white){
if(!wPieces.isEmpty()){
Image pic = wPieces.pop().getPic();
wPieces.push(new WhitePiece());
if(slotNumber <= 11){
for(int i=0;i<piecesAmount;i++){
g.drawImage(pic, 5, i*30, null);
}
}
else{
for(int i=0;i<piecesAmount;i++){
g.drawImage(pic, 5,300-(i*30), null);
}
}
}else{
System.out.println("Slot Stack is Empty Slot #"+slotNumber);
}
}else
{
if(!bPieces.isEmpty()){
Image pic = bPieces.pop().getPic();
bPieces.push(new BlackPiece());
if(slotNumber<=11){
for(int i=0;i<piecesAmount;i++){
g.drawImage(pic, 5, i*30, 30, 30, null);
}
}else{
for(int i=0;i<piecesAmount;i++){
g.drawImage(pic, 5, 300-(i*30), 30, 30, null);
}
}
}
else{
System.out.println("Slot Stack is empty Slot #"+slotNumber);
}
}
}
여기에 내가 얻을 eror입니다 : (내가 그것을 내가 얻을 방법을 나타냅니다 생각 pic is not good.)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Try1.Slot.drawSlot(Slot.java:122)
at Try1.Board.drawBoard(Board.java:128)
at Try1.Board.resetBoard(Board.java:122)
at Try1.GamePage.<init>(GamePage.java:98)
at Try1.StartPage.startGame(StartPage.java:67)
at Try1.StartPage$eventHandler.actionPerformed(StartPage.java:49)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
내가 뭘 잘못했는지 알고 싶다. 감사합니다 모두 나는 그것의 긴 게시물을 알고 당신은 정말로 그것에 들어가야 만합니다 하지만 나는 초보자이며 도움이 필요합니다 :).
1) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 2) 문장의 시작 부분에 대문자를 추가하십시오. 또한 I라는 단어에는 대문자를 사용하고 JEE 또는 WAR와 같은 약어 및 머리 글자를 사용하십시오. 이것은 사람들이 이해하고 돕는 것을 더 쉽게 만듭니다. 3) 코드 블록에 일관되고 논리적 인 들여 쓰기를 사용하십시오. 코드의 들여 쓰기는 사람들이 프로그램 흐름을 이해하도록 돕기위한 것입니다. 4) 이미 언급했듯이 컴포넌트에서 getGraphics()를 호출하지 마십시오. 5) 모든 이미지 그리기를 위해'g.drawImage (pic, 5, i * 30, null);을'g.drawImage (pic, 5, i * 30, this);로 변경하십시오. –