2016-04-13 60 views
1

oluştururken Processing'in kütüphanelerinden içinden aşağıdaki İşleme programı var: Onu çalıştırdığınızdaNullPointerException bir PShape

//using Papplet instead of STDraw to visually represent my grid, created by Mahmed Ibrahim 
import java.awt.Color; 

import processing.core.*; 

import processing.core.PApplet; 

public class C4Grid extends PApplet { 
    PShape s; 
    PShape[][] circleSpaces; 
    boolean[][] circleSpacesFilled; 
    boolean[][] circleHasYelowPiece; 
    boolean[][] circleHasRedPiece; 
    final float SPACES_BETWEEN_ROWS = 110; 
    final float SPACES_BETWEEN_COLUMNS = 130; 


    public C4Grid(){} 

    public void setup() { 
     System.out.println("it got to here where it breaks"); 

     size(1000, 1000, P2D); 

     // Making the shape of the grid using vertices 
     // so I'm manually drawing my polygon. 
     s = createShape(); 
     s.beginShape(); 
     s.fill(34, 56, 100); 
     s.tint(34, 56, 100); 
     s.stroke(0); 
     s.strokeWeight(5); 
     s.vertex(400, 400); 
     s.vertex(400, -440); 
     s.vertex(360, -440); 
     s.vertex(360, -400); 
     s.vertex(-360, -400); 
     s.vertex(-360, -440); 
     s.vertex(-400, -440); 
     s.vertex(-400, 420); 
     s.vertex(-420, 420); 
     s.vertex(-420, 440); 
     s.vertex(-360, 440); 
     s.vertex(-360, 420); 
     s.vertex(-380, 420); 
     s.vertex(-380, 400); 
     s.vertex(380, 400); 
     s.vertex(380, 420); 
     s.vertex(360, 420); 
     s.vertex(360, 440); 
     s.vertex(420, 440); 
     s.vertex(420, 420); 
     s.vertex(400, 420); 
     s.vertex(400, 420); 
     s.vertex(400, -440); 
     s.vertex(400, 400); 
     s.endShape(); 
     System.out.println("it got to here where it breaks"); 

     // using a 2D array to create a grid of circles 
     // which will represent the spaces on the grid 
     circleHasYelowPiece = new boolean[7][6]; 
     circleHasRedPiece = new boolean[7][6]; 
     circleSpacesFilled = new boolean[7][6]; 
     circleSpaces = new PShape[7][6]; 
     for (int row = 0; row < 7; row++) { 
      for (int column = 0; column < 6; column++) { 
       circleSpaces[row][column] = createShape(ELLIPSE, -380 + (row) * SPACES_BETWEEN_ROWS, 
         -370 + (column) * SPACES_BETWEEN_COLUMNS, 100, 100); 
       circleSpaces[row][column].disableStyle(); 
       stroke(0); 
       strokeWeight(5); 
       circleSpacesFilled[row][column] = false; 
       circleHasRedPiece[row][column] = false; 
       circleHasYelowPiece[row][column] = false; 
      } 
     } 

    } 

    public void draw() { 
     translate(width/2, height/2); 
     shape(s); 
     for (int row = 0; row < 7; row++) { 
      for (int column = 0; column < 6; column++) { 
       shape(circleSpaces[row][column]); 
      } 
     } 
    } 

    public boolean piecePlaced(int column, Color pieceColor) { 
     column = column - 1; // the choice are form 1-7 but in an array its 0-6; 
     boolean moveDone = false; 
     int i = 5; 
     Color red = new Color(255, 0, 0); 
     while (i >= 0) { 
      if (circleSpacesFilled[column][i] == false) { 
       circleSpacesFilled[column][i] = true; 
       if (pieceColor.equals(red)) { 
        circleHasRedPiece[column][i] = true; 
        circleSpaces[column][i].fill(255, 0, 0); 
        circleSpaces[column][i].tint(255, 0, 0); 
       } else { 
        circleHasYelowPiece[column][i] = true; 
        circleSpaces[column][i].fill(255, 255, 0); 
        circleSpaces[column][i].tint(255, 255, 0); 
       } 
       return true; 
      } 
     } 

     return false; 
    } 

} 

, bu NullPointerException olsun. Özel durumun, İşlemenin kütüphaneleri içinden geldiğine dikkat edin - doğrudan kendi kodumdan kaynaklanmaz! şüpheli

enter image description here

3 hatları şunlardır: setup()

currentGame,üstüne yakın

  1. currentGame = new C4Game(player1Is,player2Is,player1Color,player2Color);
  2. theGrid = new C4Grid(); theGrid.setup();
  3. ve s hepsi boş değil (sayısız kez kontrol ettim).

    Her satırı ayrı ayrı test ettiğimde bile, PShape sınıfıyla ilgili herhangi bir şeyde hata alıyorum. Her PShape nesnesinden kurtuldum ve çalıştı, ancak düzeltmenin bir yolu var, bu yüzden kodumun bir parçası olarak PShape'u kullanabilir miyim?

+0

sizin StackTrace nerede? İstisna bu satırda atılmaz. – f1sh

+0

Hayır, bir nullpointerException neden alma ve animasyon iş parçacığı hata nedeni nedeniyle bir çoğaltma değil. ne olduğunu bilmek istiyorum sadece nerede olduğunu bilmek istiyorum çünkü hataları aldığım satırın ne olduğunu hiç fark etmedim.Paylaşımı – user6199445

+0

Bu sınıfı nasıl aradığınızı görmemiz gerekiyor. Lütfen sorunu yeniden üretmek için 'main()' metodunu ve mümkün olduğunca az satırı içeren bir [mcve] oluşturun. Örneğiniz başka bir sınıfa gerek duymamalıdır ve aslında daha önce gönderdiğiniz kodların çoğu sadece ekstradır. Doğrudan sorunla ilgili olmayan herhangi bir şeyden kurtulun. Ayrıca, hangi İşleme sürümünü kullandığınızı da ekleyin. Kod veya hata mesajlarının ekran görüntülerini göndermekten kaçının. Mümkünse, metni doğrudan kopyalayıp yapıştırın. –

cevap

5

Kodunuzu çalıştırdığımda, NullPointerException'u alamıyorum. Bu hata iletisini alıyorum:

PDE kullanılmadığında, size() yalnızca ayarlar içinde() kullanılabilir. Kurulum() den boyutu() yöntemini çıkarın ve aşağıdakileri ekleyin :

public void settings() { 
    size(1000, 1000, "processing.opengl.PGraphics2D"); 
} 

Ve hata her şeyi söylüyor. Bir kitaplık olarak işleniyorken, setup() işlevinden size() işlevini çağıramazsınız. Bunun yerine settings() işlevinden çağırın. Ben bu değişikliği yaparsanız

, kodunuz iyi çalışır:

+0

Hayır kodun kendi başına çalışmasını sağlayabiliyorum, ancak bunu bir projede uygularken bu sınıftan hataları alıyorum. Tüm derslerimi yüklediğimde yardımcı olur mu? – user6199445

+1

@ user6199445 Anladım. Ben de bunu tutsak olarak dağıtıyorum ("bir projede hayata geçirme" ile kastediyorsunuz). Hayır, tüm derslerini yayınlama. Bunun yerine, sorununuzu bir [mcve] değerine düşürmeye çalışın. Bu mümkün olduğunca az satır olmalı, ancak kodunuzu kopyalayıp yapıştırabildiğimiz kadarıyla, aynı şeyi görebilmemiz için. –

+0

ive, ilgili bilgi ve sorunun – user6199445