简体   繁体   English

在Java中无法将object []传递给参数object []

[英]Passing an object[] to parameter object[] is not working in Java

I know this question is similar to passing a object[] to a params object[] not working however I am having a similar problem in Java. 我知道这个问题类似于将object []传递给params object []不起作用,但是我在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);
}

I have a feeling the issue is being caused by passing a object which is inside an object but I am not sure how to fix this issue as I am still a bit new to Java.. I tried to do Object[] Casting but it did not seem to work. 我感觉到问题是由于传递对象内部的对象引起的,但是由于我对Java还是有点陌生​​,所以我不确定如何解决此问题。我尝试进行Object [] Casting,但确实做到了似乎不起作用。

The error I get is java.lang.NullPointerException 我得到的错误是java.lang.NullPointerException

I have returned objSingleTableColumns using Arrays.toString(objSingleTableColumns) and it outputs the column lists as expected without an issue... 我已经使用Arrays.toString(objSingleTableColumns)返回了objSingleTableColumns ,它按预期输出了列列表,没有问题...

To clarify what db.dbShowColumns() does it returns an object of database column names based on the table name provided. 为了阐明db.dbShowColumns()作用,它根据提供的表名返回数据库列名的对象。


UPDATE : I tried initializing the array as @Mansuro suggested, but this did not work. 更新 :我尝试按照@Mansuro的建议初始化数组,但这没有用。 I did a test run to get the output to maybe resolve this issue. 我进行了一次测试,以获得可能解决此问题的输出。

Would it be possible that my code is creating a multidimensional array because I am passing an Object[] into another Object[]? 因为将Object []传递到另一个Object []中,我的代码是否可能创建多维数组? If that's they case is there a way to merge the objects? 如果是这样,是否有合并对象的方法? Because I have ran this.buildSingleModel on its own and it works perfectly. 因为我自己运行了this.buildSingleModel ,所以效果很好。


This output is without running 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]

The code for the above output is: 以上输出的代码是:

   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);


}
}

And this is the output when running this.buildSingleModel 这是运行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)

It seems that objSingleTableColumns may be null for one of the calls inside the for loop. 似乎objSingleTableColumns对于for循环内的调用之一可能为null。 Arrays.toString() accepts null so it may work fine. Arrays.toString()接受null,因此可以正常工作。 This is just guess as stack trace is not provided. 这只是猜测,因为未提供堆栈跟踪。

您必须初始化数组

objSingleTableColumns = new Object[ARRAY_SIZE];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM