this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Logger.broadcast: use invokeLater when not event dispatch thread

Many Logger listeners try to do Swing things, so run them on the event dispatch thread. Fixes a hard freeze on Linux when loading some editors.

+20 -7
+20 -7
src/main/java/util/Logger.java
··· 6 6 import java.util.Iterator; 7 7 import java.util.LinkedList; 8 8 import java.util.List; 9 + import javax.swing.SwingUtilities; 9 10 10 11 public abstract class Logger 11 12 { ··· 99 100 switch (p) { 100 101 case UPDATE: 101 102 // update messages are only intended for the progress listener 102 - if (progressListener != null) 103 - progressListener.post(msg); 103 + if (progressListener != null) { 104 + if (SwingUtilities.isEventDispatchThread()) 105 + progressListener.post(msg); 106 + else 107 + SwingUtilities.invokeLater(() -> progressListener.post(msg)); 108 + } 104 109 return; 105 110 case MILESTONE: 106 - // progress listener also recieves milestone messages 107 - if (progressListener != null) 108 - progressListener.post(msg); 111 + // progress listener also receives milestone messages 112 + if (progressListener != null) { 113 + if (SwingUtilities.isEventDispatchThread()) 114 + progressListener.post(msg); 115 + else 116 + SwingUtilities.invokeLater(() -> progressListener.post(msg)); 117 + } 109 118 break; 110 119 case WARNING: 111 120 text = "WARNING: " + text; ··· 127 136 return; 128 137 129 138 for (ListenerReference ref : listeners) { 130 - if (!p.lessThan(ref.priority)) 131 - ref.listener.post(msg); 139 + if (!p.lessThan(ref.priority)) { 140 + if (SwingUtilities.isEventDispatchThread()) 141 + ref.listener.post(msg); 142 + else 143 + SwingUtilities.invokeLater(() -> ref.listener.post(msg)); 144 + } 132 145 } 133 146 } 134 147