2013-11-18 2 views
0

Я пытаюсь принять 5 чисел в текстовом поле от пользователя, чтобы отсортировать их с использованием разных методов (bubbleSort, mergeSort, quickSort). К сожалению, я продолжаю генерировать «java.lang.NullPointerException». Я немного огляделся, и самое близкое, что я мог найти к моей проблеме, - NumberFormatException when attempting to parse string as an integer, но это было просто из-за пустого пространства. Я забросил .trim() только для хорошей меры, но безрезультатно.Попытка parseInt из String throws «java.lang.NullPointerException»

public class SortWindow { 

private JFrame frame; 
private JTextField textFieldInput; 

private String[] list; 
private int[] numList; 

private static JTextArea textAreaOutput; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       SortWindow window = new SortWindow(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

public SortWindow() { 
    initialize(); 
} 

private void initialize() { 
    frame = new JFrame(); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    //Buttons 

    JButton buttonBubble = new JButton("Bubble"); 
    buttonBubble.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      textAreaOutput.setText(""); 
      list = textFieldInput.getText().split(" "); 
      numList[0] = Integer.parseInt(list[0].trim()); 
      for (int i = 0; i < list.length; i++){ 
       numList[i] = Integer.parseInt(list[i]); 
      } 
      bubbleSort(numList); 
     } 
    }); 
    buttonBubble.setBounds(12, 13, 115, 40); 
    frame.getContentPane().add(buttonBubble); 

    //Text Fields 

    textFieldInput = new JTextField(5); 
    textFieldInput.setBounds(177, 13, 243, 40); 
    frame.getContentPane().add(textFieldInput); 
    textFieldInput.setColumns(10); 

    textAreaOutput = new JTextArea(); 
    textAreaOutput.setLineWrap(true); 
    textAreaOutput.setText("In the box above, enter 5 numbers separated by spaces."); 
    textAreaOutput.setEditable(false); 
    textAreaOutput.setBounds(177, 66, 243, 176); 
    frame.getContentPane().add(textAreaOutput); 
} 

список представляет собой массив строк, и когда я вхожу 1 2 3 4 5 (или любую другую комбинацию - я даже пытался просто введя одну цифру и посмотреть, что произошло с помощью моей второй линии, но он все еще бросил исключение) в textField в моем графическом интерфейсе, он хранит его правильно в массиве String, и я могу успешно распечатать отдельные строки в нем отлично, используя System.out.print(). Моя проблема возникает только тогда, когда я пытаюсь использовать любую из следующих четырех строк (я включил только вторую строку, чтобы убедиться, что в моем цикле for не было ничего плохого).

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

EDIT: Добавлена ​​намного большая часть моего класса в OP. Исключение в строке 60, а именно:

numList[0] = Integer.parseInt(list[0].trim()); 

EDIT2: В соответствии с просьбой, это то, что я дал.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at SortWindow$2.actionPerformed(SortWindow.java:60) 
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) 
+0

Не могли бы вы написать всю строку кода ошибки? В каком номере строки это происходит - это в 'numList [0] = Integer.parseInt (list [0] .trim());'? Это также помогло бы, если бы вы могли поделиться немного больше своего класса. –

+0

Я подозреваю, что ваша проблема в том, что весь этот код закомментирован. –

+1

numList - null. –

ответ

1

Ваш размер numList может не быть инициализирован. вы можете попробовать, как это, и посмотреть, все ли в порядке:

int[] numList=new int[5]; 
    String[] list = textFieldInput.getText().split(" "); 
      for (int i = 0; i < list.length; i++){ 
       numList[i] = Integer.parseInt(list[i]); 
       } 
       System.out.println(Arrays.toString(numList)); 
+0

Ну, теперь я чувствую себя глупо - добавление = new int [5]. Очень признателен! – Jerm

+0

рад помочь :) – Baby

0

Это исключение означает, что элемент в списке пуст (имеет значение NULL), проверьте элементы списка проблемы есть, а не в разборе части! попробовать:

System.out.println(list[0]); 

и наблюдать выход.

+0

Ввод «1» (или 1 2 3 ... и т. Д.) В мой текстовый экран, а затем печать списка [0] печатает 1, без ошибок. – Jerm

+0

попробуйте split ("\\ s") вместо split ("")/или split ("\\ s +"), если вы хотите получить дополнительные пробелы. – EsmaeelQash

+0

Оказывается, мой вопрос был моим видом на что-то маленькое. Я попробую то, что вы только что добавили. Благодарю. – Jerm