The STCourse.DTD is not found after installation when
trying to open an STX from a location other than C:\.
No error message is given, but if you enable logging
and run the installed app from the command line, you
can see the exception and where it occurs.
Need to find a way to tell the XML parser that the DTD
will always be in X location.
---------------------------------------------------------------------------
C:\Program Files\Selftest>run
C:\Program Files\Selftest>echo off
FINE: GET: Entered. [Key] ClientWindowPosition [value]
288|219|670|500 ( selftest.gui.STPropertiesManager,
getProperty )
FINE: Enterred (
selftest.gui.dialogs.questionJumper.STQuestionJumperDialog$QJTreeModel,
<init> )
FINE: Entered (
selftest.gui.dialogs.questionJumper.STQuestionJumperDialog$QJTreeModel,
addTreeModelListener )
FINE: Leaving (
selftest.gui.dialogs.questionJumper.STQuestionJumperDialog$QJTreeModel,
addTreeModelListener )
FINE: Entered (
selftest.gui.dialogs.questionJumper.STQuestionJumperDialog$QJTreeModel,
addTreeModelListener )
FINE: Leaving (
selftest.gui.dialogs.questionJumper.STQuestionJumperDialog$QJTreeModel,
addTreeModelListener )
FINE: GET: Entered. [Key] QJPos [value] null (
selftest.gui.STPropertiesManager, getProperty )
FINER: Entered handlingFrameActivated == false (
selftest.client.STClient, frameActivated )
FINER: Leaving frameActivated (true) (
selftest.client.STClient, frameActivated )
FINE: GET: Entered. [Key] WizardWindowPosition [value]
null ( selftest.gui.STPropertiesManager, getProperty )
FINE: Entered (
selftest.gui.dialogs.wizard.STWizardDialog,
handleNextButtonPress )
FINE: Enterred. (
selftest.gui.dialogs.open.STSelectExamsPanel, setState )
FINER: Setting state in selectExamsPanel (
selftest.gui.dialogs.open.STSelectExamsPanel, setState )
FINER: CourseFilename: c:\program
files\selftest\MathExamples.stx (
selftest.gui.dialogs.open.STSelectExamsPanel, setSta
te )
WARNING: ** Parsing error, line 2, uri file:c:/program
files/selftest/MathExamples.stx External entity not
found: "fil
e:c:/program files/selftest/STCourse.dtd". (
selftest.core.util.STCourseMetrics,
getAvailableExamTitles )
java.io.FileNotFoundException: c:\program
files\selftest\STCourse.dtd (The system cannot find the
file specified)
at
org.apache.crimson.parser.Parser2.fatal(Parser2.java:3182)
at
org.apache.crimson.parser.Parser2.externalParameterEntity(Parser2.java:2870)
at
org.apache.crimson.parser.Parser2.maybeDoctypeDecl(Parser2.java:1167)
at
org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:489)
at
org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
at
org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
at
javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
at
javax.xml.parsers.SAXParser.parse(SAXParser.java:281)
at
selftest.core.util.STCourseMetrics.getAvailableExamTitles(STCourseMetrics.java:73)
at
selftest.gui.dialogs.open.STSelectExamsPanel.setState(STSelectExamsPanel.java:160)
at
selftest.gui.dialogs.wizard.STWizardDialog.handleNextButtonPress(STWizardDialog.java:346)
at
selftest.gui.dialogs.wizard.STWizardDialog.access$000(STWizardDialog.java:60)
at
selftest.gui.dialogs.wizard.STWizardDialog$1.actionPerformed(STWizardDialog.java:113)
at
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1764)
at
javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1817)
at
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419)
at
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
at
java.awt.Component.processMouseEvent(Component.java:5093)
at
java.awt.Component.processEvent(Component.java:4890)
at
java.awt.Container.processEvent(Container.java:1566)
at
java.awt.Component.dispatchEventImpl(Component.java:3598)
at
java.awt.Container.dispatchEventImpl(Container.java:1623)
at
java.awt.Component.dispatchEvent(Component.java:3439)
at
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450)
at
java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165)
at
java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
at
java.awt.Container.dispatchEventImpl(Container.java:1609)
at
java.awt.Window.dispatchEventImpl(Window.java:1585)
at
java.awt.Component.dispatchEvent(Component.java:3439)
at
java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
at
java.awt.EventDispatchThread.run(EventDispatchThread.java:99)
FINE: Leaving (
selftest.gui.dialogs.open.STSelectExamsPanel, setState )
FINE: Leaving (
selftest.gui.dialogs.wizard.STWizardDialog,
handleNextButtonPress )
java.lang.NullPointerException
at javax.swing.JList$5.getSize(JList.java:1250)
at
javax.swing.plaf.basic.BasicListUI.updateLayoutState(BasicListUI.java:1128)
at
javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(BasicListUI.java:1097)
at
javax.swing.plaf.basic.BasicListUI.paint(BasicListUI.java:162)
at
javax.swing.plaf.ComponentUI.update(ComponentUI.java:142)
at
javax.swing.JComponent.paintComponent(JComponent.java:541)
at
javax.swing.JComponent.paint(JComponent.java:808)
at
javax.swing.JComponent.paintChildren(JComponent.java:647)
at
javax.swing.JComponent.paint(JComponent.java:817)
at
javax.swing.JComponent.paintChildren(JComponent.java:647)
at
javax.swing.JComponent.paint(JComponent.java:817)
at
javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4771)
at
javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4724)
at
javax.swing.JComponent._paintImmediately(JComponent.java:4668)
at
javax.swing.JComponent.paintImmediately(JComponent.java:4477)
at
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:410)
at
javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:117)
at
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:178)
at
java.awt.EventQueue.dispatchEvent(EventQueue.java:448)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
at
java.awt.EventDispatchThread.run(EventDispatchThread.java:99)
java.lang.NullPointerException
at javax.swing.JList$5.getSize(JList.java:1250)
at
javax.swing.plaf.basic.BasicListUI.updateLayoutState(BasicListUI.java:1128)
at
javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(BasicListUI.java:1097)
at
javax.swing.plaf.basic.BasicListUI.paint(BasicListUI.java:162)
at
javax.swing.plaf.ComponentUI.update(ComponentUI.java:142)
at
javax.swing.JComponent.paintComponent(JComponent.java:541)
at
javax.swing.JComponent.paint(JComponent.java:808)
at
javax.swing.JComponent.paintChildren(JComponent.java:647)
at
javax.swing.JComponent.paint(JComponent.java:817)
at
javax.swing.JComponent.paintChildren(JComponent.java:647)
at
javax.swing.JComponent.paint(JComponent.java:817)
at
javax.swing.JComponent.paintChildren(JComponent.java:647)
at
javax.swing.JComponent.paint(JComponent.java:817)
at
javax.swing.JComponent.paintChildren(JComponent.java:647)
at
javax.swing.JComponent.paint(JComponent.java:817)
at
javax.swing.JLayeredPane.paint(JLayeredPane.java:552)
at
javax.swing.JComponent.paintChildren(JComponent.java:647)
at
javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4778)
at
javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4724)
at
javax.swing.JComponent.paint(JComponent.java:798)
at
java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
at
sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at
sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1309)
at sun.awt.RepaintArea.paint(RepaintArea.java:177)
at
sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:260)
at
java.awt.Component.dispatchEventImpl(Component.java:3658)
at
java.awt.Container.dispatchEventImpl(Container.java:1623)
at
java.awt.Window.dispatchEventImpl(Window.java:1585)
at
java.awt.Component.dispatchEvent(Component.java:3439)
at
java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
at
java.awt.EventDispatchThread.run(EventDispatchThread.java:99)
FINER: Entered handlingFrameActivated == true (
selftest.client.STClient, frameActivated )
FINE: SET: Entered. [Key] ClientWindowPosition [value]
296|125|670|500 ( selftest.gui.STPropertiesManager,
setProperty )
FINE: Leaving ( selftest.gui.STPropertiesManager,
setProperty )
Logged In: YES
user_id=404306
This has been addressed in 0.25.46. The installer places an
STCourse.dtd file in the install directory (c:\program
files\selftest by default). This does not solve the problem
of needing a DTD in every directory that an STX could be
read from, but it allows the app to be run more than before.
THIS IS STILL AN ISSUE!