V2Cが固まってしまった時

V2Cが使用中に固まってしまった時は、どのような操作・タイミングで固まるのかと一緒に下のような情報があると原因の追及がし易くなります。

1. ターミナルまたはコンソールにStackTraceが出力されている場合

下のような出力だとすると、一番上の例外名の表示から'at V2C.'で始まる最後の行から3行くらいまで(下の赤い部分)を教えて下さい。


java.lang.NullPointerException
        at V2C.V2CThreadPanel.draw(V2CThreadPanel.java:1073)
        at V2C.V2CThreadPanel.renderOffscreen(V2CThreadPanel.java:2230)
        at V2C.V2CThreadPanel.renderOffscreen(V2CThreadPanel.java:2223)
        at V2C.V2CThreadPanel.paintComponent(V2CThreadPanel.java:2290)
        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.JSplitPane.paintChildren(JSplitPane.java:1021)
        at javax.swing.JComponent.paint(JComponent.java:817)
        at javax.swing.JComponent.paintChildren(JComponent.java:647)
        at javax.swing.JSplitPane.paintChildren(JSplitPane.java:1021)
        at javax.swing.JComponent.paint(JComponent.java:817)
        at javax.swing.JComponent.paintChildren(JComponent.java:647)
		(長いので後25行省略)

2. StackTraceが出力されていない場合

jdbを使用します。jdbはJava2SDKに含まれています。以下はLinuxの例で、他の環境ではオプション等が違うかもしれません。(Macは同じだと思う。)

1) V2Cを起動する
> java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -jar V2C_XYYYYMMDD.jar

8000でエラーになる場合は1024より大きい適当な数字に変えてみてください。

2) 別のターミナルでjdbを起動する
> jdb -attach 8000
3) V2Cが固まったらjdbのターミナルからV2Cをサスペンドする
> suspend

もしここでjdbのターミナルも固まってしまったなら、V2CのJavaVM自体が固まっていると思われます。

4) 各スレッドのスタックを表示する
> where all

FavoriteUpdator-0:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:429)
  [3] V2C.V2CProxySetting.setReadProxy (V2CProxySetting.java:80)
  [4] V2C.V2CHttpUtil.getHTTPFile (V2CHttpUtil.java:812)
  [5] V2C.V2CBoardItem.getSubjectTxt (V2CBoardItem.java:571)
  [6] V2C.V2CBoardItem.getSubjectTxt (V2CBoardItem.java:566)
  [7] V2C.V2CBoardItem.getAndParseSubjectTxt (V2CBoardItem.java:548)
  [8] V2C.V2CFavoriteList$FavoriteUpdator.run (V2CFavoriteList.java:149)

のように'V2C.'で始まっている行があるスレッドと

AWT-EventQueue-0:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:429)
  [3] java.awt.EventQueue.getNextEvent (EventQueue.java:339)
  [4] java.awt.EventDispatchThread.pumpOneEventForHierarchy (EventDispatchThread.java:162)
  [5] java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:151)
  [6] java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:145)
  [7] java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:137)
  [8] java.awt.EventDispatchThread.run (EventDispatchThread.java:100)

のようにV2Cの含まれないスレッドがあるので、'V2C.'で始まっている行があるスレッドのスタックの内容を教えてください。