pat*_*rik 5 java matlab nullpointerexception
您想知道在matlab中重复出现的java错误.它通常发生在matlab使用java做一些繁重的事情时.例如,这可以是按住ctrl + z或ctrl + y.
在复制之前我错误地删除了错误消息,但我认为我可以通过任何方式传递问题的核心.
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
...
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会出现这种错误?我从matlab r2007中找到了一些关于这个的信息,这是因为java swing是线程不安全的,并且matlab缺乏支持来确保线程安全.但是,这应该在matlab r2008b中修复.那我为什么现在就拿到它呢?
编辑 这是完整的堆栈跟踪:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.netbeans.editor.BaseDocument.notifyUnmodify(BaseDocument.java:1465)
at org.netbeans.editor.BaseDocument.notifyModifyCheckEnd(BaseDocument.java:816)
at org.netbeans.editor.BaseDocumentEvent.redo(BaseDocumentEvent.java:336)
at javax.swing.undo.UndoManager.redoTo(Unknown Source)
at javax.swing.undo.UndoManager.redo(Unknown Source)
at com.mathworks.mwswing.undo.MUndoManager.redo(MUndoManager.java:255)
at org.netbeans.editor.ActionFactory$RedoAction.actionPerformed(ActionFactory.java:767)
at org.netbeans.editor.BaseAction.actionPerformed(BaseAction.java:259)
at javax.swing.SwingUtilities.notifyAction(Unknown Source)
at javax.swing.JComponent.processKeyBinding(Unknown Source)
at javax.swing.JComponent.processKeyBindings(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at com.mathworks.widgets.SyntaxTextPaneBase.processKeyEvent(SyntaxTextPaneBase.java:1187)
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.KeyboardFocusManager.redispatchEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(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.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)
Run Code Online (Sandbox Code Playgroud)
好吧,根据您的堆栈跟踪,您的问题可能没有任何明确的答案,正如您已经在 MATLAB 论坛中看到的那样,但鉴于这一行,我认为有一个可能的解释:
\nException in thread "AWT-EventQueue-0" java.lang.NullPointerException\n ...\n at javax.swing.undo.UndoManager.redoTo(Unknown Source) // <-- here!\n at javax.swing.undo.UndoManager.redo(Unknown Source)\n at com.mathworks.mwswing.undo.MUndoManager.redo(MUndoManager.java:255)\n ...\n
Run Code Online (Sandbox Code Playgroud)\nUndoManager类保留UndoableEdit对象的内部集合。该集合实际上继承自其超类:CompoundEdit。
\nUndoManager#redo()和UndoManager#redoTo(UndoableEdit edit)的内部实现如下所示:
\npublic class UndoManager extends CompoundEdit implements UndoableEditListener {\n ...\n public synchronized void redo() throws CannotRedoException {\n if (inProgress) {\n UndoableEdit edit = editToBeRedone();\n if (edit == null) {\n throw new CannotRedoException();\n }\n redoTo(edit);\n } else {\n super.redo();\n }\n }\n ...\n protected void redoTo(UndoableEdit edit) throws CannotRedoException {\n boolean done = false;\n while (!done) {\n UndoableEdit next = edits.elementAt(indexOfNextAdd++);\n next.redo(); // NPE here?\n done = next == edit;\n }\n }\n ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n考虑到这种实现,并考虑到 Swing 的事件调度线程 (EDT)很容易引起问题,我认为这可能是 MATLAB 线程和 EDT 之间的线程问题。具体来说,这个 MATLAB 调用的方法可能是问题的根源:
\nat com.mathworks.mwswing.undo.MUndoManager.redo(MUndoManager.java:255)\n
Run Code Online (Sandbox Code Playgroud)\n既然您说 MATLAB 需要做繁重的工作,那么认为此方法正在尝试重做一些可能不再可用或由于 EDT 同步问题而可能尚不可用的编辑并非没有道理。
\n 归档时间: |
|
查看次数: |
12813 次 |
最近记录: |