-1

基本上我有这个代码来打印我点击jgraph的每个顶点的单元格标签。我正在尝试将单元格的值存储到字符串数组中。我试过这个:

graphComponent.getGraphControl().addMouseListener(new MouseAdapter() {

        public void mousePressed(MouseEvent e) {

        ArrayList<Object> objarr = new ArrayList<Object>() ;  

                        if (e.getButton() == 3 && e.getClickCount() == 1) {
                        long x = e.getX();
                        long y = e.getY();
                        Object cell = graphComponent.getCellAt((int) x, (int)y); 
                        System.out.println(graph.convertValueToString(cell));
                        objarr.add(cell);
                    }

                        String[] stringArray = objarr.toArray(new String[100]) ;
}
                });         
    }

当我尝试单击顶点时出现这些错误:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayStoreException
    at java.lang.System.arraycopy(Native Method)
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.ArrayList.toArray(Unknown Source)
    at GUIquery$2.mousePressed(GUIquery.java:498)
    at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
    at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(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)
4

1 回答 1

0

这是解决此类问题的过程。

at java.util.ArrayList.toArray(Unknown Source)
at GUIquery$2.mousePressed(GUIquery.java:498)`

第 498 行必须是

String[] stringArray = objarr.toArray(new String[100]) ;

检查ArrayList文档<T> T[] toArray(T[] a)

当调用它时,它会尝试将ArrayList<Object>type 的成员存储ObjectString[]. 所以它给出了一个ArrayStoreException。问题的根源在于计算机不知道是什么类型 cell。您声明 is as an Object,所以这就是它的类型。如果getCellAt()返回字符串,请使用String cell.

注意这里不是一个优雅的解决方案,如果你有一个Object obj_str你知道是 a 的 a String,你可以用

String str = (String)obj_str;
于 2013-09-16T01:05:29.800 回答