0

このNetBeansプラットフォームアプリケーションのスタックトレースで「EDTからDataObjectを取得しようとする」とはどういう意味ですか。

[INFO] INFO [org.netbeans.ui.metrics.projects]: USG_PROJECT_OPEN
[INFO] WARNING [org.netbeans.TopSecurityManager]: use of system property netbeans.user has been obsoleted in favor of InstalledFileLocator at org.netbeans.modules.masterfs.providers.Attributes.getRootForAttributes(Attributes.java:104)
[INFO] WARNING [org.openide.loaders.FolderChildren..tmp.lol.Wonderland.scenes]: Attempt to obtain DataObject for /tmp/lol/Wonderland/scenes/Alice.inc@d30e0395:b749a5 from EDT
[INFO] INFO [org.openide.loaders.FolderChildren..tmp.lol.Wonderland.scenes]: Ineffective since #199391 was implemented
[INFO] java.lang.Exception: Find for /tmp/lol/Wonderland/scenes/Alice.inc@d30e0395:b749a5
[INFO]  at org.openide.loaders.FolderChildren$DelayedNode.convert(FolderChildren.java:451)
[INFO]  at org.openide.loaders.FolderChildren$DelayedNode.convert(FolderChildren.java:399)
[INFO]  at org.openide.util.lookup.InstanceContent$ConvertingItem.getInstance(InstanceContent.java:316)
[INFO]  at org.openide.util.lookup.AbstractLookup.lookup(AbstractLookup.java:421)
[INFO]  at org.openide.nodes.FilterNode$FilterLookup.lookup(FilterNode.java:2114)
[INFO]  at org.openide.nodes.FilterNode$FilterLookup.lookup(FilterNode.java:2114)
[INFO]  at povray.projects.PovRayProxyChildren.createNodes(PovRayProxyChildren.java:30)
[INFO]  at org.openide.nodes.FilterNode$Children$LazySupport$FilterNodeEntry.nodes(FilterNode.java:1895)
[INFO]  at org.openide.nodes.EntrySupport$Lazy$EntryInfo.getNode(EntrySupport.java:1645)
[INFO]  at org.openide.nodes.FilterNode$Children$LazySupport$FilterLazySnapshot.get(FilterNode.java:1741)
[INFO]  at org.openide.nodes.FilterNode$Children$LazySupport$FilterNodeEntry.nodes(FilterNode.java:1886)
[INFO]  at org.openide.nodes.EntrySupport$Lazy$EntryInfo.getNode(EntrySupport.java:1645)
[INFO]  at org.openide.nodes.FilterNode$Children$LazySupport$FilterLazySnapshot.get(FilterNode.java:1741)
[INFO]  at org.openide.nodes.FilterNode$Children$LazySupport$FilterNodeEntry.nodes(FilterNode.java:1886)
[INFO]  at org.openide.nodes.EntrySupport$Lazy$EntryInfo.getNode(EntrySupport.java:1645)
[INFO]  at org.openide.nodes.FilterNode$Children$LazySupport$FilterLazySnapshot.get(FilterNode.java:1741)
[INFO]  at org.openide.nodes.EntrySupport$Lazy$LazySnapshot.get(EntrySupport.java:1871)
[INFO]  at org.openide.nodes.EntrySupport$Lazy$LazySnapshot.get(EntrySupport.java:1858)
[INFO]  at org.openide.explorer.view.VisualizerChildren.getChildAt(VisualizerChildren.java:127)
[INFO]  at org.openide.explorer.view.VisualizerNode.getChildAt(VisualizerNode.java:321)
[INFO]  at javax.swing.tree.DefaultTreeModel.getChild(DefaultTreeModel.java:156)
[INFO]  at javax.swing.tree.FixedHeightLayoutCache$VisibleFHTreeStateNodeEnumeration.nextElement(FixedHeightLayoutCache.java:1506)
[INFO]  at javax.swing.tree.FixedHeightLayoutCache$VisibleFHTreeStateNodeEnumeration.nextElement(FixedHeightLayoutCache.java:1461)
[INFO]  at javax.swing.tree.AbstractLayoutCache.getPreferredWidth(AbstractLayoutCache.java:228)
[INFO]  at javax.swing.plaf.basic.BasicTreeUI.updateCachedPreferredSize(BasicTreeUI.java:1820)
[INFO]  at javax.swing.plaf.basic.BasicTreeUI.getPreferredSize(BasicTreeUI.java:1921)
[INFO]  at javax.swing.plaf.basic.BasicTreeUI.getPreferredSize(BasicTreeUI.java:1909)
[INFO]  at javax.swing.JComponent.getPreferredSize(JComponent.java:1634)
[INFO]  at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:769)
[INFO]  at org.openide.explorer.view.TreeView$ExplorerScrollPaneLayout.layoutContainer(TreeView.java:1823)
[INFO]  at java.awt.Container.layout(Container.java:1421)
[INFO]  at java.awt.Container.doLayout(Container.java:1410)
[INFO]  at java.awt.Container.validateTree(Container.java:1507)
[INFO]  at java.awt.Container.validate(Container.java:1480)
[INFO]  at org.openide.explorer.view.TreeView.access$101(TreeView.java:151)
[INFO]  at org.openide.explorer.view.TreeView$3.run(TreeView.java:683)
[INFO]  at org.openide.util.Mutex.readAccess(Mutex.java:365)
[INFO]  at org.openide.util.Mutex$1R.run(Mutex.java:1307)
[INFO]  at org.openide.nodes.Children$ProjectManagerDeadlockDetector.execute(Children.java:1920)
[INFO]  at org.openide.util.Mutex.doWrapperAccess(Mutex.java:1326)
[INFO]  at org.openide.util.Mutex.readAccess(Mutex.java:354)
[INFO]  at org.openide.explorer.view.TreeView.validate(TreeView.java:681)
[INFO]  at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:670)
[INFO]  at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1635)
[INFO]  at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
[INFO]  at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
[INFO]  at java.awt.EventQueue.access$000(EventQueue.java:84)
[INFO]  at java.awt.EventQueue$1.run(EventQueue.java:602)
[INFO]  at java.awt.EventQueue$1.run(EventQueue.java:600)
[INFO]  at java.security.AccessController.doPrivileged(Native Method)
[INFO]  at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
[INFO]  at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
[INFO]  at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:162)
[INFO]  at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
[INFO]  at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
[INFO]  at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
[INFO]  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
[INFO]  at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
[INFO]  at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

?それを修正する方法は?これは、アプリケーションで特別なプロジェクトタイプ(.pov)を開くために開いているときに発生します。何も害はありませんが、.pov-projectファイルごとに同じメッセージでターミナル出力をフラッディングします。

編集1

ああ、いくつかの調査の結果、EDTは「イベントディスパッチャスレッド」を意味し、何らかの理由でDataObjectsにアクセスすることが禁止されていることがわかりました。このような禁止の理由と、ノードがFS上の隠しファイルを表すかどうかを正しくテストするにはどうすればよいですか?正しく別のスレッドを作成するにはどうすればよいですか?

4

2 に答える 2

1

禁止の理由は、これによりIOがディスクに接続される可能性があるため、EDTでは回避する必要があるためです。そうしないと、UIがフリーズする可能性があります。

スレッド化とその正しい使用法については、http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.htmlを参照してください。

ファイルが非表示になっているかどうかを知るには、java.io.Fileにアクセスする必要があります。

ファイルにアクセスするには、次のことを行う必要があります。

FileObject fo = DATAOBJECT.getPrimaryFile();
File = FileUtil.toFile(fo)

エラーコードを追加する必要があります。

于 2012-05-07T18:19:51.323 に答える
1

このバグに関する投稿でJesseGlickが説明したように、https ://netbeans.org/bugzilla/show_bug.cgi?id = 199391

DataObjectを使用することによるディスクへのIOを回避するために、可能な限りDataObjectではなくFileObjectを探してみてください。

ノードオブジェクトからFileObjectを取得する例:

FileObject fileObject = (FileObject) node.getLookup().lookup(FileObject.class);

FileObjectインスタンスは、java.io.Fileクラスで使用可能な多くのメソッドをサポートしているため、多くの情報を提供できます。

于 2015-10-22T16:29:19.650 に答える