Document Viewer crashes designer when changing page

I want to use a Document Viewer to display a simple html page. However, I noticed crashes when changing the page automatically.

Meanwhile I’ve made a pretty minimal example (see the upload below). The minimal examples offers two buttons to switch between two html files. When you switch between the files too quickly, the designer becomes completely unresponsive, and has to be shut down via the task manager. It also starts to use up more and more memory (about 1 MB per second) while it’s hanging.

For the minimal example, the html files are stored under C:\file1.html and C:\file2.html`, with a pretty minimal content like

<html><body>
Contents file 1
</body></html>

The server and designer are both running on my local computer,

Note that the bigger or the more complex the html files are, the easier it is to get the designer to crash. With these simple file it takes a few fast clicks to make the designer crash, but when I first tried with a file having an external CSS defined, it consistently crashed on one of the first switch operations.

When I tried with text files, the Document Viewe did not crash (at least not as quickly).

Did anyone ever notice this behaviour? And is there a solution for it? As the designer hangs completely, it’s very hard to debug for me.

crash_2017-07-17_1352.proj (5.4 KB)

EDIT: Forgot to say, I’m using 7.9.1 for the moment.

Bump …

Nobody ever had this issue?

I’ve tried again with the most recent version (7.9.4), and it happens again. This time I attached VS as a debugger, and saw null pointers. Since this isn’t possible in plain Java, it’s probably a bug in a native library (or in the JVM itself).

It only happens when loading files over http or from the file system. It doesn’t happen when you put other data in the text attribute directly.

At this point, I can’t even open that page without it crashing on me.

crash.proj (8.1 KB)

Luckily I didn’t use it on an important page yet. Imagine I wouldn’t be able to open that page anymore …

Just tried on Linux with openjdk and icedtea, to have no common parts with the other system, and it crashes in the same way.

EDIT: Was able to catch the trace on Linux (as the error was unresponsive just like the designer itself, the trace couldn’t be read from the error message).

The trace shows it’s crashing on getting a non-existing file (though with http, it should just get back a 404 page I guess).

14:16:28.696 [AWT-EventQueue-1] ERROR com.inductiveautomation.factorypmi.application.components.PMIEditorPane - IO Exception setting editor pane's URL.
java.io.FileNotFoundException: http://atlign04:8088/main/ATREE/Lalesse_help/000003053.htm
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1926)
	at sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1921)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1920)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1490)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
	at javax.swing.JEditorPane.getStream(JEditorPane.java:768)
	at javax.swing.JEditorPane.setPage(JEditorPane.java:432)
	at javax.swing.JEditorPane.setPage(JEditorPane.java:880)
	at com.inductiveautomation.factorypmi.application.components.PMIEditorPane.setPage(PMIEditorPane.java:106)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.handlers.ObjectDeserializationHandler.endSubElement(ObjectDeserializationHandler.java:68)
	at com.inductiveautomation.factorypmi.application.xmlserialization.ComponentDeserializationHandler.endSubElement(ComponentDeserializationHandler.java:93)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer$ParseContext.onElementEnd(XMLDeserializer.java:885)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:165)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.parse(BinaryParser.java:51)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserializeBinary(XMLDeserializer.java:339)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:259)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:235)
	at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserialize(XMLDeserializer.java:167)
	at com.inductiveautomation.ignition.designer.DesignerContextImpl.deserialize(DesignerContextImpl.java:470)
	at com.inductiveautomation.factorypmi.application.model.TemplateManager.getTemplateInstance(TemplateManager.java:200)
	at com.inductiveautomation.factorypmi.designer.workspace.WindowWorkspace.openTemplate(WindowWorkspace.java:1890)
	at com.inductiveautomation.factorypmi.designer.model.navtree.TemplateNode.onDoubleClick(TemplateNode.java:142)
	at com.inductiveautomation.ignition.designer.navtree.NavTreePanel$MouseListener$1.run(NavTreePanel.java:659)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.io.FileNotFoundException: http://atlign04:8088/main/ATREE/Lalesse_help/000003053.htm
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1872)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
	at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
	at javax.swing.JEditorPane.getStream(JEditorPane.java:733)
	... 40 common frames omitted