我一直收到此错误但我在代码中看不到任何逻辑错误。
线程中的异常" 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);
.....
}
我尝试将I更改为1,但仍然收到NullPointerException
。
该错误似乎位于int position = locateStock();
,但我不确定。
答案 0 :(得分:-1)
当您尝试引用在程序执行时尚未声明的对象时,会发生NullPointerException。
当您尝试将i的初始值更改为1时仍然出现异常的事实告诉我,当您致电locateStock()
时,您的TechStocks列表尚未使用new List<TechStock>()
进行初始化在致电locateStock()
之前的陈述。因此,当您尝试使用stocks.size()
声明for循环时,会出现异常,因为此时stocks
为空。
但是,很难说如何准确地解决您的问题,因为您没有真正在您的代码段中提供足够的信息,以便任何人都知道该代码如何适合您的程序的其他部分。