2016-12-06 3 views
0

Ich bin kürzlich über das folgende Verhalten gestolpert. Ich habe eine Anwendung, die die -XstartOnFirstThread gesetzt werden muss. Und wenn ich dieses Flag auf die VM setze und versuche, Objekte in einem anderen Thread zu deserialisieren, hängt es einfach. das Beispiel Siehe unten:XStream und -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(); 
    } 
} 

Hier ist die Stacktrace: enter image description here

Da es an dem Classloader zu blockieren scheint, ich denke, es das Problem gefunden werden soll. Ich habe den gleichen Test mit javafx.scene.shape.Rectangle gemacht und diesmal hat es funktioniert.

Also muss es ein Problem mit AWT-Klassen und mit startOnFirstThread ?! Vielleicht kann mir jemand einen Hinweis in die richtige Richtung geben, was diese Probleme verursacht.

Vielen Dank im Voraus!

Antwort

0

Scheint, ich habe gerade das Problem gefunden. Wenn ich eine Toolkit.getDefaultToolkit(); im Konstruktor oder statischen Initialisierer meiner Testklasse mache, hängt es nicht mehr.

Ich bin mir nicht sicher über den Grund dafür, aber es scheint, dass System.loadLibrary("awt") auf den falschen Thread oder mit dem falschen Classloader getan wird, wenn XStream versucht, eine AWT-Klasse zu initiieren.