我已经设置了一个Matlab函数,它使用了未记录的Matlab函数“uitree”。 “uitree”已存在超过10年,并且仍然(R2016b)由MATLAB“提供”使用。我使用了“uitree”的返回值(句柄)和一些简单的“java”函数,用于在执行m函数期间添加和删除树节点。
但是当使用我的m函数处理一个非常大的文件(我用于我的m函数的回归测试)时,我得到以下(错误)消息,该消息在Matlab命令窗口中以红色显示。这个消息只是偶尔出现,假设当我处理同一个大文件10次时它会发生一次。消息完全相同,数字也是245和241.
此消息不会在MATLAB中导致任何错误,我在处理大文件的结果中没有看到任何异常,但我想了解原因是什么以及我可以做些什么来避免它。不幸的是由于上述原因(偶发并且不会导致任何错误)我在尝试添加断点和显示消息以找到位置时没有运气。不幸的是,我对Java,Swing和Awt都不熟悉: - (。
与已经提出的类似问题不同的是“What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?”在我的情况下,它是偶尔发生的,所以偶尔会出现一个同一个文件被处理的消息。
任何人都可以给我一些提示,它可能是什么以及我能做些什么来找到问题的原因?
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 245 >= 241
at java.util.Vector.removeElementAt(Unknown Source)
at javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.collapse(Unknown Source)
at javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.collapse(Unknown Source)
at javax.swing.tree.VariableHeightLayoutCache.setExpandedState(Unknown Source)
at javax.swing.plaf.basic.BasicTreeUI$Handler.treeCollapsed(Unknown Source)
at javax.swing.JTree.fireTreeCollapsed(Unknown Source)
at javax.swing.JTree.setExpandedState(Unknown Source)
at javax.swing.JTree.collapsePath(Unknown Source)
at com.mathworks.hg.peer.UITreePeer$4.run(UITreePeer.java:221)
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)
这里概述了使用的相关m函数和Java函数:
hTree = uitree
jTree = hTree.Tree
hTreeNode = uitreenode
hTree
属于班级:javahandle_withcallbacks.com.mathworks.hg.peer.UITreePeer
jTree
属于班级:javahandle_withcallbacks.com.mathworks.hg.peer.utils.UIMJTree
hTreeNode
属于班级:javahandle.com.mathworks.hg.peer.UITreeNode
我不知道究竟是什么直接来自Java以及Java / MATLAB与MATLAB实现的界面中的内容...代码片段
% For Tree Context Menu
hJTree= handle(jTree, 'CallbackProperties');
hJTree.MousePressedCallback= {@guiCallback_tree_mousePressed,sessionNum};
% ...
% Cell renderer ... Get a dummy color definition
bsc= jTree.getCellRenderer.getBackgroundSelectionColor;
jTree.getCellRenderer.setBackgroundSelectionColor(bsc.lightGray);
jTree.getCellRenderer.setBorderSelectionColor(bsc.lightGray);
% ...
treePath= jTree.getSelectionPath.getPath;
for i=2:length(treePath)
lable= char(treePath(i).getValue);
end
hTreeNode
add, getChildCount, getChildAt, getValue, getLevel, getParent, setName, repaint
hTree
Position, NodeSelectedCallback, expand, collapse
getModel
使用insertNodeInto, removeNodeFromParent
jTree
isExpanded, setSelectionPath, isPathSelected, scrollPathToVisible
javax.swing.tree.TreePath("pathnode")