2016-12-06 15 views
0

最近次のような現象が発生しました。 -XstartOnFirstThreadを設定する必要のあるアプリケーションがあります。私はこのフラグをVMに設定し、別のスレッドのオブジェクトを逆シリアル化しようとすると、単にハングします。 例は、以下を参照してください:私が発見される問題があると思うのClassLoaderでブロックするように思われますので enter image description hereXStreamと-XstartOnFirstThread

ここ
import java.awt.Rectangle; 
import com.thoughtworks.xstream.XStream; 
public class XStreamTest { 
    public static void main(String[] args) { 
     new Thread(() -> { 
      XStream x = new XStream(); 
      Rectangle r = new Rectangle(); 
      String xml = x.toXML(r); 

      Object o = x.fromXML(xml); 
      System.out.println("ready"); 
      return; 
     }).start(); 
    } 
} 

は、スタックトレースです。私はjavafx.scene.shape.Rectangleを使って同じテストを行い、今回はうまくいった。

したがって、awtクラスに問題があり、startOnFirstThreadを使用する必要がありますか? 誰かが正しい方向に私のヒントを与えることができます。

事前に感謝します。

答えて

0

私はちょうど問題を発見しました。 Toolkit.getDefaultToolkit(); をテストクラスのコンストラクタまたは静的初期化子で実行すると、それ以上ハングしません。

理由はわかりませんが、XStreamがawtクラスを初期化しようとすると、間違ったスレッドや間違ったクラスローダーでSystem.loadLibrary("awt")が行われているようです。