2012-09-27 4 views
2

나는이 예외 디버깅하려고 힘든 시간을 보내고 있었어요 : 이것은 내 코드입니다 Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1예외 "AWT-EventQueue의-0"java.lang.ArrayIndexOutOfBoundsException : 1

package com.Homework.Table; 

import java.awt.BorderLayout; 
import java.awt.Container; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 

public class ArrayTable { 
    static String [][] records; 

    public static void main(String [] args) 
    { 
     String [] columns= { "col1", "col2", "col3","col4" }; 
     String array ="A&B&1&May 8 2011 12:17AM;;E&D&5&May 8 2011 12:43AM;;F&G&5&May 8 2011 7:06AM;;H&I&1&May 14 2011 11:57PM"; 
     records=to2dim (array ,";;","&"); 
     Object rows[][] =records; 
     JFrame f = new JFrame("JTable Sample"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Container content = f.getContentPane(); 
     JTable table = new JTable(rows, columns); 
     JScrollPane scrollPane = new JScrollPane(table); 
     content.add(scrollPane, BorderLayout.CENTER); 
     f.setSize(300, 200); 
     f.setVisible(true); 
    } 

    public static String [][] to2dim (String source , String outerdelim, String innerdelim) { 
     String [][] result = new String [source.replaceAll ("[^" + outerdelim + "]", "").length() + 1][]; 
     int count = 0; 
     for (String line : source.split ("[" + outerdelim + "]")) 
     { 
      result [count++] = line.split (innerdelim); 
     } 
     return result; 
    } 
} 

이것은 내가받은 응답입니다

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 
at javax.swing.JTable$1.getValueAt(Unknown Source) 
at javax.swing.JTable.getValueAt(Unknown Source) 
at javax.swing.JTable.prepareRenderer(Unknown Source) 
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source) 
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source) 
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source) 
at javax.swing.plaf.ComponentUI.update(Unknown Source) 
at javax.swing.JComponent.paintComponent(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JViewport.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JLayeredPane.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paintToOffscreen(Unknown Source) 
at javax.swing.BufferStrategyPaintManager.paint(Unknown Source) 
at javax.swing.RepaintManager.paint(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source) 
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source) 
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source) 
at java.awt.Container.paint(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source) 
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source) 
at java.awt.event.InvocationEvent.dispatch(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

배열 색인 outofbound는 배열이 너무 작을 때 발생합니다. int [] i = new int [4]; 5 요소를 보유하고 있습니다 – imulsion

+0

내 배열이 매우 큽니다. 문자열은 비슷하지만 크기는 더 큽니다. 내 배열은 4163x4이고 배열은 2 차원 배열 – user1702856

+0

"rows"배열과 "columns"배열의 너비가 다를 수 있습니다. 그것들을 JTable의 테이블 데이터에 적용하면 (자), 행의 폭과 헤더의 행의 폭이 다릅니다. –

답변

1

두 번째, 네 번째 및 여섯 번째 행에 하나의 열만 있습니다. 4 열이어야합니다.

2
import java.awt.BorderLayout; 
import java.awt.Container; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import java.util.Arrays; 
public class ArrayTable { 
    static String [][] records; 

    public static void main(String [] args) 
    { 
     String [] columns= { "col1", "col2", "col3","col4" }; 
     String array ="A&B&1&May 8 2011 12:17AM;;E&D&5&May 8 2011 12:43AM;;F&G&5&May 8 2011 7:06AM;;H&I&1&May 14 2011 11:57PM"; 
     records=to2dim (array ,";;","&"); 
     Object rows[][] =records; 
     JFrame f = new JFrame("JTable Sample"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Container content = f.getContentPane(); 
     JTable table = new JTable(rows, columns); 
     JScrollPane scrollPane = new JScrollPane(table); 
     content.add(scrollPane, BorderLayout.CENTER); 
     f.setSize(300, 200); 
     f.setVisible(true); 
    } 

    public static String [][] to2dim (String source , String outerdelim, String innerdelim) { 

     String [][] result = new String [(source.split (outerdelim)).length][]; 
     int count = 0; 

     System.out.println("result len "+result.length); 
     for (String line : source.split (outerdelim)) 
      { 
       result [count++] = line.split (innerdelim); 
      } 

     System.out.println(Arrays.deepToString(result)); 
     return result; 
    } 
} 

이 작업은 사용자를 위해 수행해야합니다. [;;]은 단일 문자와 일치하므로이 값에 기반한 분리는 두 개의 연속 된 ; 사이에 공백을 추가합니다. 그래서 ;;으로 변경해야합니다.

+0

IT DID : D thanx a Bunch는 to2dim이 배열을 건너 뛰는 길이 +1 이었습니까? 그게 제가 알아 차린 것입니까? – user1702856

+0

다른 문제입니다. 길이가 N 인 배열은 배열 [0]을 의미합니다. array [N -1] – sakthisundar

+0

Thanx alot :) :) – user1702856