* an error dialog is shown, and processing returns, the button
* becoming re-enabled.
*/
-public class MarketUploader implements TopLevelWindowListener, GUIInitializedListener {
+public class MarketUploader implements Runnable, TopLevelWindowListener, GUIInitializedListener {
private JFrame frame = null;
private Window window = null;
private JButton findMarket = null;
uploadToPCTB=prefs.getBoolean("uploadToPCTB", true);
showArbitrage=prefs.getBoolean("showArbitrage", true);
- EventQueueMonitor.addTopLevelWindowListener(this);
+ if (dtxt!=null) dtxt.println("main on dispatch thread: "+EventQueue.isDispatchThread());
+ EventQueue.invokeLater(this);
+ }
+
+ /*
+ * We arrange to wait for the GUI to be initialised, then look at every top-level window,
+ * and if it
+ */
+ public void run() {
+ if (dtxt!=null) dtxt.println("MarketUploader run()...");
if (EventQueueMonitor.isGUIInitialized()) {
- createGUI();
+ if (dtxt!=null) dtxt.println("MarketUploader GUI already ready");
+ guiInitialized();
} else {
+ if (dtxt!=null) dtxt.println("MarketUploader waiting for GUI");
EventQueueMonitor.addGUIInitializedListener(this);
}
}
+
+ public void guiInitialized() {
+ Window ws[]= EventQueueMonitor.getTopLevelWindows();
+ EventQueueMonitor.addTopLevelWindowListener(this);
+ for (int i=0; i<ws.length; i++) {
+ if (dtxt!=null) dtxt.println("MarketUploader existing toplevel "+i);
+ topLevelWindowCreated(ws[i]);
+ }
+ }
+
+ public void topLevelWindowDestroyed(Window w) {
+ if (dtxt!=null) dtxt.println("MarketUploader destroyed toplevel");
+ }
+
+ public void topLevelWindowCreated(Window w) {
+ if (frame!=null)
+ // already got it
+ return;
+ String name = w.getAccessibleContext().getAccessibleName();
+ if (dtxt!=null) dtxt.println("MarketUploader new toplevel "+name);
+ if (!name.equals("Puzzle Pirates"))
+ return;
+ if (dtxt!=null) dtxt.println("MarketUploader found toplevel, creating gui");
+ window = w;
+ createGUI();
+ frame.setVisible(true);
+ }
/**
* Set up the GUI, with its window and one-button
* a Window named "Puzzle Pirates" though.
*/
private void createGUI() {
- if (frame != null && window != null) {
- if (window.getAccessibleContext().getAccessibleName().equals("Puzzle Pirates")) frame.setVisible(true);
- return;
- }
frame = new JFrame("Jarrg Uploader");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
GridLayout layout = new GridLayout(2,1);
new MarketUploader();
}
- /**
- * Set the global window variable after the YPP window is created,
- * remove the top level window listener, and start the GUI
- */
- public void topLevelWindowCreated(Window w) {
- window = w;
- EventQueueMonitor.removeTopLevelWindowListener(this);
- createGUI();
- }
-
/**
* Returns true if the "Display:" menu on the commodities interface in YPP is set to "All"
*
return true;
}
- public void topLevelWindowDestroyed(Window w) {}
-
- public void guiInitialized() {
- createGUI();
- }
-
/**
* Gets the list of commodities and their associated commodity ids.
*