Передача объекта [] параметру object [] не работает в Java - PullRequest
0 голосов
/ 01 октября 2011

Я знаю, что этот вопрос похож на передачу объекта [] в объект params [], не работающий , однако у меня возникла аналогичная проблема в Java.

try {
  Object[] objSingleTableColumns = null;
  DatabaseActions db = new DatabaseActions();
  db.dbConnect(sDatabase);
  for (int i=0 ; i < objTableList.length; i++) {
    objSingleTableColumns = db.dbShowColumns(objTableList[i].toString());
    this.buildSingleModel(objTableList[i].toString(), sDatabase, objSingleTableColumns, false);
  }
  db.dbClose();
} catch (Exception e) {
  System.out.println("Error with Multiple Columns" + e);
}

У меня есть ощущение, что проблема вызвана передачей объекта, который находится внутри объекта, но я не уверен, как решить эту проблему, так как я все еще немного новичок в Java .. Я пытался сделать Object [] Casting но это не похоже на работу.

Я получаю ошибку java.lang.NullPointerException

Я возвратил objSingleTableColumns , используя Arrays.toString(objSingleTableColumns), и он выводит списки столбцов, как и ожидалось, без проблем ...

Чтобы уточнить, что db.dbShowColumns() возвращает объект имен столбцов базы данных на основе предоставленного имени таблицы.


UPDATE : Я попытался инициализировать массив, как предложил @Mansuro, но это не сработало. Я выполнил тестовый прогон, чтобы получить выходные данные для решения этой проблемы.

Возможно ли, что мой код создает многомерный массив, потому что я передаю Object [] в другой Object []? Если это так, есть ли способ объединить объекты? Потому что я запустил this.buildSingleModel сам по себе, и он отлично работает.


Этот выход не работает this.buildSingleModel

objTableList = [glossary, messages, prodfeatures, renters, source, test_table]
objTableList.length = 6
objSingleTableColumns = [gid, gname, gmeaning]
objSingleTableColumns = [mid, msubject, mtype, mread, mcid, mmessage, mtimedate, mproduct, mstar]
objSingleTableColumns = [fid, fpid, ftext, ftype, fsort, fonline]
objSingleTableColumns = [rid, fname, lname, phone, email]
objSingleTableColumns = [sid, sw]
objSingleTableColumns = [tid, tname, tdesc]

Код для вышеприведенного вывода:

   public void  buildMultipleModels(String sDatabase, Object[] objTableList)  {


try {

      Object[] objSingleTableColumns = new Object[100];

      DatabaseActions db = new DatabaseActions();
      db.dbConnect(sDatabase);


       System.out.println("objTableList = " + Arrays.toString(objTableList));
       System.out.println("objTableList.length = " + objTableList.length);

      for (int i=0 ; i < objTableList.length; i++) {
            objSingleTableColumns = db.dbShowColumns(objTableList[i].toString());

            System.out.println("objSingleTableColumns = " + Arrays.deepToString(objSingleTableColumns));

           // this.buildSingleModel(objTableList[i].toString(), sDatabase, objSingleTableColumns, false);
      }
      db.dbClose();


} catch (Exception e) {

   System.out.println("Error with Multiple Columns --> Exception =" + e);

    StringWriter sw = new StringWriter();
    new Throwable("").printStackTrace(new PrintWriter(sw));
    String stackTrace = sw.toString();


   System.out.println("Stack trace = " + stackTrace);


}
}

А это выход при работе this.buildSingleModel

objTableList = [glossary, messages, prodfeatures, renters, source, test_table]
objTableList.length = 6
objSingleTableColumns = [gid, gname, gmeaning]
Error with Multiple Columns --> Exception =java.lang.NullPointerException
Stack trace = java.lang.Throwable: 
        at genModel.buildMultipleModels(genModel.java:170)
        at genModel.doBuildMultipleModels(genModel.java:67)
        at frmMain.btnGenerateMultipleModelsActionPerformed(frmMain.java:530)
        at frmMain.access$600(frmMain.java:44)
        at frmMain$7.actionPerformed(frmMain.java:322)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Ответы [ 2 ]

0 голосов
/ 01 октября 2011

Вы должны инициализировать массив

objSingleTableColumns = new Object[ARRAY_SIZE];
0 голосов
/ 01 октября 2011

Кажется, что objSingleTableColumns может быть нулевым для одного из вызовов внутри цикла for.Arrays.toString () принимает значение null, поэтому может работать нормально.Это всего лишь предположение, поскольку трассировка стека не предоставляется.

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