Есть ошибки, но я не вижу, где - PullRequest
0 голосов
/ 02 ноября 2011

По какой-то причине я получаю ошибки в приведенном ниже коде, и я не понимаю, почему, вы можете обнаружить какие-либо?

public void delTask_mouseClicked(MouseEvent e)
{
    if(delTask.isEnabled() == false) {
        int numTasks = taskTable.getRowCount();
        Object[] currentTasks;
        currentTasks = new Object[numTasks];
        for (int i = 0; i < numTasks ; i++){
            Object tasks = taskTable.getModel().getValueAt(i, 1);
            currentTasks[i] = tasks;
        }
        System.out.println(currentTasks);
     }
}

Спасибо за помощь, очень ценю.

Ниже приведен массивный блок ошибок:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at projecttaskmanagement.ProjectGUI.delTask_mouseClicked(ProjectGUI.java:233)
at projecttaskmanagement.ProjectGUI$2.mouseClicked(ProjectGUI.java:109)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)
at java.awt.Component.processMouseEvent(Component.java:5520)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
at java.awt.Component.processEvent(Component.java:5282)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3984)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1791)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

КОД В ЛИНИИ 233: int numTasks = taskTable.getRowCount ();

ТАБЛИЦА ЗАДАНИЙ ОПРЕДЕЛЕНА НИЖЕ:

    String[] taskcolumnNames = {"ID #",
            "Name",
            "Description",
            "Start Date",
            "End Date",
            "Staff",
            "Completed"};
    Object[][] taskdata = {
            {new Integer(1), "Requirements Analysis",
             "Analysing the requirements",
             "01/09/2011", "15/10/2011",
             "Bob", new Boolean(true)},
            {new Integer(2), "System Design",
             "Designing the System",
             "15/09/2011", "15/10/2011",
             "Alice", new Boolean(true)},
            {new Integer(3), "Code (A)",
             "Part 'A' of coding",
             "01/10/2011", "15/11/2011",
             "David", new Boolean(true)},
        };
    JTable taskTable = new JTable(taskdata, taskcolumnNames);

Ответы [ 2 ]

3 голосов
/ 02 ноября 2011

Пока мы ждем от вас сообщения о фактических ошибках, которые вы получаете (a) , пожалуйста, уделите время НИКОГДА , сделайте следующее:

if (delTask.isEnabled() == false)

Намного удобнее читать:

if (! delTask.isEnabled())

Теперь мы вернемся к вашему запланированному программированию в ожидании вашего обновления.


Dum de dum de dum ...

Теперь, основываясь на вашем обновлении, следующая часть стекапакета:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at projecttaskmanagement.ProjectGUI.delTask_mouseClicked(ProjectGUI.java:233)

указывает, в чем заключается проблема.Узнайте, какая из этих строк в строке № 233, и вот она у вас.То, что вы пытаетесь отнести к этой строке, на самом деле является пустой ссылкой.

Исходя из фрагмента, это, вероятно, будет одна из следующих строк:

public void delTask_mouseClicked(MouseEvent e)
{
    if(delTask.isEnabled() == false) {                            // <--
        int numTasks = taskTable.getRowCount();                   // <--
        Object[] currentTasks;
        currentTasks = new Object[numTasks];
        for (int i = 0; i < numTasks ; i++){
            Object tasks = taskTable.getModel().getValueAt(i, 1); // <--
            currentTasks[i] = tasks;
        }
        System.out.println(currentTasks);
     }
}

Первое будет, потому что delTask само по себе равно нулю, второе, если taskTable равно нулю.

Третье будет, если taskTable само по себе допустимо, но значение, возвращаемое его методом getModel(), равно нулю..


Итак, похоже, что ваш taskTable равен нулю.Что касается , почему это так, это непостижимо, исходя из текущей информации.Что вам нужно будет сделать, это проверить все места, для которых установлено допустимое значение, и убедиться, что это происходит за до того, что вы (или, скорее всего, AWT под контролем вашего пользователя) вызовете этот метод.

И, конечно же, убедитесь, что в какой-то момент после создания он не имеет значения NULL.

Если вы не можете гарантировать, что вам, вероятно, потребуется изменить:

if (delTask.isEnabled() == false)

примерно так:

if ((! delTask.isEnabled()) && (taskTable != NULL))

, но я бы предпочел исправить причину проблемы, а не применять этот лейкопластырь.

Ваш кодэто создает JTable, кажется, хорошо (синтаксически), но есть небольшая загадка , где это сделано.Он создан таким образом, чтобы его можно было использовать там, где вы пытаетесь его использовать.

Например, если этот код, который его создает, находится внутри конструктора, этот конкретный taskTable будет локальным по отношению к указанному конструктору.(и уничтожается при выходе), не может использоваться из других источников.В этом случае необходимо сделать переменную уровня объекта, чтобы другие методы могли получить к ней доступ.

Вы можете увидеть этот эффект в следующей программе:

public class testprog {
    public Object thingOne;
    public Object thingTwo;

    public void someFunction() {
        thingOne = new Object();
        Object thingTwo = new Object();
    }

    public void debug() {
        if (thingOne == null)
            System.out.println ("thingOne is NULL");
        else
            System.out.println ("thingOne is valid");
        if (thingTwo == null)
            System.out.println ("thingTwo is NULL");
        else
            System.out.println ("thingTwo is valid");
    }

    public static void main(String args[]) {
        testprog tp = new testprog();
        tp.someFunction();
        tp.debug();
    }
}

Это выводит:

thingOne is valid
thingTwo is NULL

, поскольку thje thingTwo, установленный в someFunction(), является локальной версией и никоим образом не устанавливает уровень объекта thingTwo - уровень объектаодин остается как null, и, если вы попытаетесь разыменовать его, вы увидите ту же проблему, что и у вас.


(a) best Отчеты о проблемах поставляются с небольшим полным фрагментом кода, демонстрирующим проблему, ожидаемое поведение и фактическое поведение.

Если мы разместим ваш образец в голом Eclipse JavaПрограмма, она очень не завершена.MouseEvent, delTask и taskTable не имеют определений, и без этой информации немного сложно отладить.

Кроме того, Eclipse (для синтаксических ошибок) и сама Java (для ошибок времени выполнения)Я могу в мельчайших подробностях рассказать вам о своих проблемах, и вы должны прочитать то, что вам говорит.Вы также должны сообщить нам эту информацию, если вам нужна помощь: -)

0 голосов
/ 02 ноября 2011

Какая строка является строкой 233 из ProjectGUI.java?По крайней мере одно из следующего является нулевым:

  • delTask
  • taskTable
  • taskTable.getModel()

Выяснитькакая из них попадает в строку 233 (согласно вашему сообщению об ошибке), и вы выяснили, в чем проблема.Нам нужно увидеть больше кода, чтобы определить, почему переменная не имеет ожидаемого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...