[英]Passing an object[] to parameter object[] is not working 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);
}
我感覺到問題是由於傳遞對象內部的對象引起的,但是由於我對Java還是有點陌生,所以我不確定如何解決此問題。我嘗試進行Object [] Casting,但確實做到了似乎不起作用。
我得到的錯誤是java.lang.NullPointerException
我已經使用Arrays.toString(objSingleTableColumns)
返回了objSingleTableColumns ,它按預期輸出了列列表,沒有問題...
為了闡明db.dbShowColumns()
作用,它根據提供的表名返回數據庫列名的對象。
更新 :我嘗試按照@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)
似乎objSingleTableColumns對於for循環內的調用之一可能為null。 Arrays.toString()接受null,因此可以正常工作。 這只是猜測,因為未提供堆棧跟蹤。
您必須初始化數組
objSingleTableColumns = new Object[ARRAY_SIZE];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.