{"action":"created","issue":{"url":"https://api.github.com/repos/vorth/vzome-desktop/issues/26","repository_url":"https://api.github.com/repos/vorth/vzome-desktop","labels_url":"https://api.github.com/repos/vorth/vzome-desktop/issues/26/labels{/name}","comments_url":"https://api.github.com/repos/vorth/vzome-desktop/issues/26/comments","events_url":"https://api.github.com/repos/vorth/vzome-desktop/issues/26/events","html_url":"https://github.com/vorth/vzome-desktop/pull/26","id":143343519,"number":26,"title":"Fixed thread race condition when updating PartsPanel","user":{"login":"david-hall","id":10957322,"avatar_url":"https://avatars.githubusercontent.com/u/10957322?v=3","gravatar_id":"","url":"https://api.github.com/users/david-hall","html_url":"https://github.com/david-hall","followers_url":"https://api.github.com/users/david-hall/followers","following_url":"https://api.github.com/users/david-hall/following{/other_user}","gists_url":"https://api.github.com/users/david-hall/gists{/gist_id}","starred_url":"https://api.github.com/users/david-hall/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/david-hall/subscriptions","organizations_url":"https://api.github.com/users/david-hall/orgs","repos_url":"https://api.github.com/users/david-hall/repos","events_url":"https://api.github.com/users/david-hall/events{/privacy}","received_events_url":"https://api.github.com/users/david-hall/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":4,"created_at":"2016-03-24T19:55:13Z","updated_at":"2016-03-27T02:30:46Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/vorth/vzome-desktop/pulls/26","html_url":"https://github.com/vorth/vzome-desktop/pull/26","diff_url":"https://github.com/vorth/vzome-desktop/pull/26.diff","patch_url":"https://github.com/vorth/vzome-desktop/pull/26.patch"},"body":"* Ensure that propertyChangeEvents are handled on the EventDispatchThread\r\n* Cleanup several trivial compiler warnings.\r\n\r\nI got distracted from testing the ColorMapping persistence to a file. Now that this PartsPanel bug is fixed, I'll try to finish testing the ColorMapping stuff soon."},"comment":{"url":"https://api.github.com/repos/vorth/vzome-desktop/issues/comments/201972959","html_url":"https://github.com/vorth/vzome-desktop/pull/26#issuecomment-201972959","issue_url":"https://api.github.com/repos/vorth/vzome-desktop/issues/26","id":201972959,"user":{"login":"david-hall","id":10957322,"avatar_url":"https://avatars.githubusercontent.com/u/10957322?v=3","gravatar_id":"","url":"https://api.github.com/users/david-hall","html_url":"https://github.com/david-hall","followers_url":"https://api.github.com/users/david-hall/followers","following_url":"https://api.github.com/users/david-hall/following{/other_user}","gists_url":"https://api.github.com/users/david-hall/gists{/gist_id}","starred_url":"https://api.github.com/users/david-hall/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/david-hall/subscriptions","organizations_url":"https://api.github.com/users/david-hall/orgs","repos_url":"https://api.github.com/users/david-hall/repos","events_url":"https://api.github.com/users/david-hall/events{/privacy}","received_events_url":"https://api.github.com/users/david-hall/received_events","type":"User","site_admin":false},"created_at":"2016-03-27T02:30:46Z","updated_at":"2016-03-27T02:30:46Z","body":"Looks like the ExclusiveAction class is specifically designed for running on the non-UI thread. If an ExclusiveAction ultimately fires a PropertyChangeEvent such as manifestationAdded, then that handler is not executed on the UI thread. Specifically, I discovered that creating a strut by dragging with the mouse works on the UI thread, but hiding a strut with Ctrl-H is not processed on the UI thread. Creating a strut with JoinBalls is not on the UI thread either. I suspect that most, if not all of the classes derived from ChangeManifestations may not be run on the UI thread and could potentially have similar considerations, but that's just speculation at this point  I ran out of time and didn't dig much deeper at this time. It looks like there are only a couple of places in DocumentFrame where the ExclusiveAction constructor is called so it should be easy to figure out what's happening. \r\n\r\nI don't think I'll get to look at it much more until Monday or Tuesday, but I wanted to pass along what I found so far. Hopefully this much will stir up something that will help you determine which approach we should take to the multiple thread issue. Let me know if there's something else in particular you want me to look into."}}