2012-06-25 4 views
0

Итак, я продумал некоторый код и не могу справиться с этой ошибкой исключения нулевого указателя.Исключение Null Pointer с Jsoup Parse

Я пытаюсь разобрать таблицы из строк исходного кода 2290 до 3153 http://pastebin.com/DjGHED5t

Однако в одном из моего CSS запрашивает код не удается, и не имеет никакого смысла для меня, почему.

public void updateCompanyIs()throws IOException{ 
    investoolsLogin(); 

    Document doc = Jsoup.connect("http://toolbox.investools.com/graphs/fundamentalAnalysis.iedu?report=BS&symbol="+(Ticker)).get(); 
    // Elements table = doc.select("table"); 
/**LINE 72**/ 
    Elements columns = doc.getElementById("fundamentalsForm").children().select("table").get(0).select("tr").get(0).select("td"); 
    Iterator<Element> columnIterator = columns.iterator(); 
    int col = 0; 
    int row = 0; 
     while (columnIterator.hasNext()) { 
      Element column = columnIterator.next(); 
      Elements rows = column.select("table").get(0).select("tr"); 
      Iterator<Element> rowsIterator = rows.iterator(); 
      col = col + 1; 
      while (rowsIterator.hasNext()){ 
       row = row + 1; 
       //Element rowIterator.next = ; 
       incomeStatementInfo[col][row] = rowsIterator.next(); 
      } 
     } 
    } 

    public void updateCompanyBs()throws IOException{ 
     investoolsLogin(); 

     Document doc = Jsoup.connect("http://toolbox.investools.com/graphs/fundamentalAnalysis.iedu?report=BS&symbol="+(Ticker)).get(); 
     // Elements table = doc.select("table"); 
     Elements columns = doc.getElementById("fundamentalsForm").children().select("table").get(0).select("tr").get(0).select("td"); 
     Iterator<Element> columnIterator = columns.iterator(); 
     int col = 0; 
     int row = 0; 
     while (columnIterator.hasNext()) { 
      Element column = columnIterator.next(); 
      Elements rows = column.select("table").get(0).select("tr"); 
      Iterator<Element> rowsIterator = rows.iterator(); 
      col = col + 1; 
      while (rowsIterator.hasNext()){ 
       row = row + 1; 
       //Element rowIterator.next = ; 
       balanceSheetInfo[col][row] = rowsIterator.next(); 
      } 
     } 
    } 

    public void updateCompanyCf()throws IOException{ 
     investoolsLogin(); 

     Document doc = Jsoup.connect("http://toolbox.investools.com/graphs/fundamentalAnalysis.iedu?report=BS&symbol="+(Ticker)).get(); 
     // Elements table = doc.select("table"); 
     Elements columns = doc.getElementById("fundamentalsForm").children().select("table").get(0).select("tr").get(0).select("td"); 
     Iterator<Element> columnIterator = columns.iterator(); 
     int col = 0; 
     int row = 0; 
     while (columnIterator.hasNext()) { 
      Element column = columnIterator.next(); 
      Elements rows = column.select("table").get(0).select("tr"); 
      Iterator<Element> rowsIterator = rows.iterator(); 
      col = col + 1; 
      while (rowsIterator.hasNext()){ 
       row = row + 1; 
       //Element rowIterator.next = ; 
       cashFlowsInfo[col][row] = rowsIterator.next(); 
      } 
     } 
    } 

    public void updateCompanyInfo(String Ticker) throws IOException { 
    /** LINE 134**/ 
     updateCompanyIs(); 
     updateCompanyBs(); 
     updateCompanyCf(); 

    } 
} 

Это ошибка:

Exception in thread "main" java.lang.NullPointerException 
    at Company.updateCompanyIs(Company.java:72) 
    at Company.updateCompanyInfo(Company.java:134) 
    at Company.<init>(Company.java:41) 
    at AppGUI.main(AppGUI.java:124) 

И это мой AppGUI:

public static void main(String[] args) throws Exception{ 
    Company company = new Company("KO"); // Creates new Company. Updating methods are called from constructor automatically. 
    AppGUI frame = new AppGUI(company); // Creates new App GUI. Various panes are initialized from constructor. 
    frame.retrieveGUI(company); 
    frame.setTitle("Financial Calculator | Ratios"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setMinimumSize(new Dimension(1000, 500)); 
    frame.pack(); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
} 

Я думаю, что мой JSOUP код правильный, но я мог бы получить путать с выбором и узлов, а также запрос. Если кто-то может помочь, это будет очень признательно.

+1

Что касается строки 72, если это был мой код, я бы разбил линию с длинными цепочками и поместил каждый вызов метода в свою собственную строку, тем лучше, чтобы узнать, какой вызов метода вызывает NPE. Также рассмотрите также использование отладочных операторов. –

+0

Я сломал его, и он все еще сказал строку 72. Я пробовал использовать печать toString в каждый промежуток времени, и все они потерпели неудачу. – user1093111

+0

это заставило бы меня поверить, что это связано с getElementById, но это не имеет смысла. – user1093111

ответ

0

Линия 72: Elements columns = doc.getElementById("fundamentalsForm").children().select("table").get(0).select("tr").get(0).select("td");

Судя по комментариям, представляется, что doc.getElementById("fundamentalsForm") создающего NPE.

Я подозреваю, что каждая действительная страница имеет форму «fundamentalsForm», так что это не должно быть проблемой. Вы проверили и видите, что вы не запускаете страницу с ошибкой (т. Е. Тикер не зарегистрирован)?

+0

Я не проверял, и я не уверен, как бы я это сделал. Я знаю, что KO зарегистрирован. Это Coke. Но я обнаружил, что имя пользователя и пароль f orm был фактически userid и пароль. – user1093111

+0

Я думаю, что вы правы, но я не знаю, как узнать, на какой странице программа собирается. – user1093111

Смежные вопросы