2016-03-24 25 views
-2

Bu hatayı almaya devam ediyorum ancak kodumda herhangi bir mantıksal hata göremiyorum. Loop NullPointerException ile ArrayList Search

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

private double getValueOrDefault(String symbol, double defaultValue) { 
    double value = getValue(symbol); 

    if (value != -1) 
     return value; 
    else 
     return defaultValue; 
} 

public void createStocks() { 
    // try get stock realtime values 
    stocks.add(new TechStock("BB", 30.3)); 
    stocks.add(new TechStock("GOOG", getValueOrDefault("GOOG", 5.8))); 
    stocks.add(new TechStock("AMZN", getValueOrDefault("AMZN", 6.3))); 
    stocks.add(new FinanceStock("GLNG", getValueOrDefault("GLNG", 121))); 
} 

public static double getValue(String symbol) { 
    // read data 
    try { 
     URL url = new URL(API_URL.replace("XXX", symbol)); 
     Scanner s = new Scanner(url.openStream()); 

     // find price 
     while (s.hasNextLine()) { 
      String line = s.nextLine(); 

      if (line.startsWith("\"price\"")) { 
       // split shenanigans 
       String[] f = line.split("\""); 
       return Double.parseDouble(f[3]); 
      } 
     } 

     // if we reached here: the stock is invalid 
     return -1; 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    return -1; 
} 


public class StockFrame extends Frame 
{ 
    private int amount; 
    private Portfolio portfolio; 
    private ArrayList <StockMarket> stocks = new ArrayList<StockMarket>(); 
    private TextArea stockDetails; 
    private TextField purchaseCode; 
    private boolean found = false; 

private int locateStock() { 
    for(int i = 0; i<stocks.size(); i++) { 
     if(stocks.get(i).getCode().equals(purchaseCode.getText())) { 
      return i; 
     } 
    } 
    return -1; 
} 

private void a() { 

int position = locateStock(); 
if(position != -1){ 
    StockMarket bs = stocks.get(position); 
..... 
} 

Ben 1 ila değişen çalıştı ama ben hala NullPointerException alırlar. Hata, int position = locateStock(); adresinde görünüyor, ancak emin değilim. Eğer programın yürütülmesinde bu noktada beyan edilmiş bir nesneyi referans çalıştığınızda

+5

Yeterli bilgi verdiğinizi düşünüyor musunuz? –

+7

Bu bağlantıya bakın: http://stackoverflow.com/q/218384/3973077 –

+0

Gelecekteki referanslar için, tüm yığını göstermek ve hangi kod satırına işaret etmek her zaman en iyisidir. Hata tanımınızla tam olarak nerede olduğunu bilmiyoruz. Özellikle zor çünkü tüm kodu yapıştırmadınız ve sadece NullPointerException'ın nerede olabileceğini tahmin ediyoruz. –

cevap

-1

A NullPointerException oluşur.

i için 1 locateStock() çağırdığınızda, TechStocks sizin Listesi önce locateStock() arayarak bir new List<TechStock>() ifadeye başlatılmamış söylüyor başlangıç ​​değerini değiştirerek çalıştığımızda yine istisna var aslında. Bu nedenle, stocks.size() kullanarak for döngüsü bildirmeye çalıştığınızda, stocks bu noktada boş olduğundan bir özel durum alırsınız.

Ancak, eğer gerçekten bu kod programın geri kalanı ile bağlamında nasıl uyduğunu kimsenin bilmesini için Snippet'inizdeki yeterince bilgi teklif etmedi çünkü tam olarak sorunun nasıl söylemek zor.

+0

TechStock ve diğer tüm alt türlerin hepsi hepsi aynı arrayList stoklarına giren alt sınıflardır. –

+0

Sorun bu TechStock değil, onun ArrayList kendi stokları. Size() veya get() öğesini çağırmayı denemeden önce oluşturmadıysanız, bir Özel Durum alırsınız. yorumların birinde hatanın konumu olarak bu çizgiyi işaret yukarıda beri: 'if (. stocks.get (i) .getCode() eşittir (purchaseCode.getText()))' Bu şu anlama gelir: a) 'stocks.get (i)' stocks null ise bir istisna atar, ki bu durumda şüpheliyim, çünkü kodunuzda hiçbir noktada yeni bir ArrayList() görüyorum. b) 'stocks.get (i) .getCode()', index'te TechStock nesnesi boşsa bir istisna atar. – NAMS

+0

Stoklar burada başlatıldı: özel ArrayList stokları = yeni ArrayList () ;. B noktasında büyüyebilirsin, çünkü oradaki hatanın meydana geldiğini hissediyorum. –