[ 
https://issues.apache.org/jira/browse/NETBEANS-262?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16397642#comment-16397642
 ] 

Matthias Bläsing edited comment on NETBEANS-262 at 3/13/18 9:04 PM:
--------------------------------------------------------------------

The error comes from the external HTML browser implementation, that uses DDE to 
control a webbrowser. DDE is a windows only RMI solution, allowing you to send 
messages between windows on the windows desktop.

The implementation is done in native code (see 
_extbrowser/native/NbDDEBrowserImpl.cpp_) and it looks like Oracle removed the 
pre-build binaries at the time of the donation.

This error comes from org.netbeans.modules.extbrowser.NbDdeBrowserImpl which 
loads the native library and tries to handle a load error by catching 
Exception, but _java.lang.UnsatisfiedLinkError_ is raised. This not being an 
Error and not an Exception lets it fall through the catch.

So there is one fast help: catch _UnsatisfiedLinkError_ in 
_NbDdeBrowserImpl.java_ line 96. This at least gives a sensible message.

For the long term: Either find a way to compile the native code on the fly. Or 
use the DDE implementation contained in JNA Platform to replace the native code.

Update:

This is the DdemlUtilTest code:

[https://github.com/java-native-access/jna/blob/master/contrib/platform/test/com/sun/jna/platform/win32/DdemlUtilTest.java]

it demonstrates the use of DDE and the supplied StandaloneDdeClient.


was (Author: mblaesing):
The error comes from the external HTML browser implementation, that uses DDE to 
control a webbrowser. DDE is a windows only RMI solution, allowing you to send 
messages between windows on the windows desktop.

The implementation is done in native code (see 
_extbrowser/native/NbDDEBrowserImpl.cpp_) and it looks like Oracle removed the 
pre-build binaries at the time of the donation.

This error comes from org.netbeans.modules.extbrowser.NbDdeBrowserImpl which 
loads the native library and tries to handle a load error by catching 
Exception, but _java.lang.UnsatisfiedLinkError_ is raised. This not being an 
Error and not an Exception lets it fall through the catch.

So there is one fast help: catch _UnsatisfiedLinkError_ in 
_NbDdeBrowserImpl.java_ line 96. This at least gives a sensible message.

For the long term: Either find a way to compile the native code on the fly. Or 
use the DDE implementation contained in JNA Platform to replace the native code.

> JavaDoc can't be displayed in the browser
> -----------------------------------------
>
>                 Key: NETBEANS-262
>                 URL: https://issues.apache.org/jira/browse/NETBEANS-262
>             Project: NetBeans
>          Issue Type: Bug
>          Components: ide - UI
>    Affects Versions: 9.0
>         Environment: Product Version: Apache NetBeans IDE Dev (Build 
> incubator-netbeans-release-168-on-20180110)
> Java: 9.0.1; Java HotSpot(TM) 64-Bit Server VM 9.0.1+11
> Runtime: Java(TM) SE Runtime Environment 9.0.1+11
> System: Windows 10 version 10.0 running on amd64; Cp1252; en (nb)
>            Reporter: Thomas Kellerer
>            Priority: Major
>
> When trying to display the JavaDocs for the class at the cursor location 
> ("Alt-F1") an exception is thrown:
> {noformat}java.lang.NoClassDefFoundError: Could not initialize class 
> org.netbeans.modules.extbrowser.NbDdeBrowserImpl
>       at 
> org.netbeans.modules.extbrowser.FirefoxBrowser.createHtmlBrowserImpl(FirefoxBrowser.java:81)
>       at 
> org.netbeans.core.NbURLDisplayer.warmBrowserUp(NbURLDisplayer.java:100)
>       at org.netbeans.core.NbURLDisplayer.access$000(NbURLDisplayer.java:47)
>       at org.netbeans.core.NbURLDisplayer$1.run(NbURLDisplayer.java:59)
> Caused: org.openide.util.RequestProcessor$SlowItem: task failed due to
>       at org.openide.util.RequestProcessor.post(RequestProcessor.java:395)
>       at org.netbeans.core.NbURLDisplayer.showURL(NbURLDisplayer.java:55)
>       at 
> org.netbeans.modules.editor.java.GoToSupport$3.run(GoToSupport.java:212)
>       at 
> org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:586)
>       at 
> org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:130)
>       at 
> org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:114)
>       at 
> org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:181)
>       at 
> org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:178)
>       at 
> org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
>       at 
> org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:335)
>       at 
> org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
>       at 
> org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
>       at 
> org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:178)
>       at 
> org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:81)
>       at 
> org.netbeans.modules.editor.java.GoToSupport.performGoToImpl(GoToSupport.java:189)
>       at 
> org.netbeans.modules.editor.java.GoToSupport.access$100(GoToSupport.java:116)
>       at 
> org.netbeans.modules.editor.java.GoToSupport$2.run(GoToSupport.java:170)
>       at 
> org.netbeans.modules.progress.ui.RunOffEDTImpl$1.run(RunOffEDTImpl.java:146)
>       at 
> org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1418)
>       at 
> org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
>       at org.openide.util.lookup.Lookups.executeWith(Lookups.java:278)
> [catch] at 
> org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2033)
> {noformat}
> This is when using "Firefox" as the browser in the options dialog.
> When I try to configure the "Firefox" entry by clickin on "Edit" the 
> following exception is thrown:
> {noformat}java.lang.NoClassDefFoundError: Could not initialize class 
> org.netbeans.modules.extbrowser.NbDdeBrowserImpl
>       at 
> org.netbeans.modules.extbrowser.SystemDefaultBrowser.defaultBrowserExecutable(SystemDefaultBrowser.java:144)
>       at 
> org.netbeans.modules.extbrowser.ExtWebBrowser.getBrowserExecutable(ExtWebBrowser.java:217)
> Caused: java.lang.reflect.InvocationTargetException
>       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.base/java.lang.reflect.Method.invoke(Method.java:564)
>       at 
> org.openide.nodes.PropertySupport$Reflection.getValue(PropertySupport.java:264)
>       at 
> org.openide.explorer.propertysheet.PropUtils.updateEdFromProp(PropUtils.java:876)
>       at 
> org.openide.explorer.propertysheet.PropUtils.getPropertyEditor(PropUtils.java:849)
> Caused: java.lang.IllegalStateException: Error getting property value
>       at 
> org.openide.explorer.propertysheet.PropUtils.getPropertyEditor(PropUtils.java:865)
>       at 
> org.openide.explorer.propertysheet.PropUtils.getPropertyEditor(PropUtils.java:789)
>       at 
> org.openide.explorer.propertysheet.CustomEditorDisplayer.getPropertyEditor(CustomEditorDisplayer.java:103)
>       at 
> org.openide.explorer.propertysheet.CustomEditorDisplayer.getCustomEditor(CustomEditorDisplayer.java:94)
>       at 
> org.openide.explorer.propertysheet.CustomEditorDisplayer.getComponent(CustomEditorDisplayer.java:326)
>       at 
> org.openide.explorer.propertysheet.PropertyPanel.installDisplayerComponent(PropertyPanel.java:472)
>       at 
> org.openide.explorer.propertysheet.PropertyPanel.addNotify(PropertyPanel.java:715)
>       at java.desktop/java.awt.Container.addNotify(Container.java:2796)
>       at java.desktop/javax.swing.JComponent.addNotify(JComponent.java:4784)
>       at java.desktop/java.awt.Container.addNotify(Container.java:2796)
>       at java.desktop/javax.swing.JComponent.addNotify(JComponent.java:4784)
>       at java.desktop/java.awt.Container.addNotify(Container.java:2796)
>       at java.desktop/javax.swing.JComponent.addNotify(JComponent.java:4784)
>       at java.desktop/java.awt.Container.addNotify(Container.java:2796)
>       at java.desktop/javax.swing.JComponent.addNotify(JComponent.java:4784)
>       at java.desktop/java.awt.Container.addNotify(Container.java:2796)
>       at java.desktop/javax.swing.JComponent.addNotify(JComponent.java:4784)
>       at java.desktop/javax.swing.JRootPane.addNotify(JRootPane.java:733)
>       at java.desktop/java.awt.Container.addNotify(Container.java:2796)
>       at java.desktop/java.awt.Window.addNotify(Window.java:772)
>       at java.desktop/java.awt.Dialog.addNotify(Dialog.java:759)
>       at 
> org.netbeans.core.windows.services.NbPresenter.addNotify(NbPresenter.java:448)
>       at java.desktop/java.awt.Window.pack(Window.java:810)
>       at 
> org.netbeans.core.windows.services.NbPresenter.initialize(NbPresenter.java:252)
>       at 
> org.netbeans.core.windows.services.NbPresenter.<init>(NbPresenter.java:188)
>       at org.netbeans.core.windows.services.NbDialog.<init>(NbDialog.java:50)
>       at 
> org.netbeans.core.windows.services.DialogDisplayerImpl$1.run(DialogDisplayerImpl.java:130)
>       at 
> org.netbeans.core.windows.services.DialogDisplayerImpl$1.run(DialogDisplayerImpl.java:94)
>       at 
> org.netbeans.modules.openide.util.NbMutexEventProvider$Event.doEventAccess(NbMutexEventProvider.java:115)
>       at 
> org.netbeans.modules.openide.util.NbMutexEventProvider$Event.readAccess(NbMutexEventProvider.java:75)
>       at 
> org.netbeans.modules.openide.util.LazyMutexImplementation.readAccess(LazyMutexImplementation.java:71)
>       at org.openide.util.Mutex.readAccess(Mutex.java:193)
>       at 
> org.netbeans.core.windows.services.DialogDisplayerImpl.createDialog(DialogDisplayerImpl.java:94)
>       at 
> org.netbeans.core.windows.services.DialogDisplayerImpl.createDialog(DialogDisplayerImpl.java:86)
>       at 
> org.netbeans.core.ui.options.general.GeneralOptionsPanel.editBrowserButtonActionPerformed(GeneralOptionsPanel.java:435)
>       at 
> org.netbeans.core.ui.options.general.GeneralOptionsPanel.access$600(GeneralOptionsPanel.java:62)
>       at 
> org.netbeans.core.ui.options.general.GeneralOptionsPanel$5.actionPerformed(GeneralOptionsPanel.java:246)
>       at 
> java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
>       at 
> java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
>       at 
> java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
>       at 
> java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
>       at 
> java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:269)
>       at 
> java.desktop/java.awt.Component.processMouseEvent(Component.java:6578)
>       at 
> java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3343)
>       at java.desktop/java.awt.Component.processEvent(Component.java:6343)
>       at java.desktop/java.awt.Container.processEvent(Container.java:2259)
>       at 
> java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4961)
>       at 
> java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2317)
>       at java.desktop/java.awt.Component.dispatchEvent(Component.java:4793)
>       at 
> java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
>       at 
> java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4539)
>       at 
> java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4480)
>       at 
> java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2303)
>       at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2758)
>       at java.desktop/java.awt.Component.dispatchEvent(Component.java:4793)
>       at 
> java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:766)
>       at java.desktop/java.awt.EventQueue.access$500(EventQueue.java:97)
>       at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:717)
>       at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:711)
>       at java.base/java.security.AccessController.doPrivileged(Native Method)
>       at 
> java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:89)
>       at 
> java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:99)
>       at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:739)
>       at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:737)
>       at java.base/java.security.AccessController.doPrivileged(Native Method)
>       at 
> java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:89)
>       at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:736)
>       at 
> org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136)
> [catch] at 
> java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:199)
>       at 
> java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
>       at 
> java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
>       at 
> java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
>       at 
> java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
>       at 
> java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
> {noformat}
> When I switch to "<Default System Browser>" a different exception is thrown 
> when trying to display the JavaDocs for a class:
> {noformat}java.lang.UnsatisfiedLinkError: no extbrowser64 in java.library.path
>       at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2541)
>       at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:873)
>       at java.base/java.lang.System.loadLibrary(System.java:1857)
>       at 
> org.netbeans.modules.extbrowser.NbDdeBrowserImpl.<clinit>(NbDdeBrowserImpl.java:82)
>       at 
> org.netbeans.modules.extbrowser.SystemDefaultBrowser.createHtmlBrowserImpl(SystemDefaultBrowser.java:94)
>       at 
> org.netbeans.core.NbURLDisplayer.warmBrowserUp(NbURLDisplayer.java:100)
>       at org.netbeans.core.NbURLDisplayer.access$000(NbURLDisplayer.java:47)
>       at org.netbeans.core.NbURLDisplayer$1.run(NbURLDisplayer.java:59)
> Caused: org.openide.util.RequestProcessor$SlowItem: task failed due to
>       at org.openide.util.RequestProcessor.post(RequestProcessor.java:395)
>       at org.netbeans.core.NbURLDisplayer.showURL(NbURLDisplayer.java:55)
>       at 
> org.netbeans.modules.editor.java.GoToSupport$3.run(GoToSupport.java:212)
>       at 
> org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:586)
>       at 
> org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:130)
>       at 
> org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:114)
>       at 
> org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:181)
>       at 
> org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:178)
>       at 
> org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
>       at 
> org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:335)
>       at 
> org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
>       at 
> org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
>       at 
> org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:178)
>       at 
> org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:81)
>       at 
> org.netbeans.modules.editor.java.GoToSupport.performGoToImpl(GoToSupport.java:189)
>       at 
> org.netbeans.modules.editor.java.GoToSupport.access$100(GoToSupport.java:116)
>       at 
> org.netbeans.modules.editor.java.GoToSupport$2.run(GoToSupport.java:170)
>       at 
> org.netbeans.modules.progress.ui.RunOffEDTImpl$1.run(RunOffEDTImpl.java:146)
>       at 
> org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1418)
>       at 
> org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
>       at org.openide.util.lookup.Lookups.executeWith(Lookups.java:278)
> [catch] at 
> org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2033)
> {noformat}
> Firefox is the default browser in my system.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to