diff --git a/app/src/processing/mode/javascript/JavaScriptEditor.java b/app/src/processing/mode/javascript/JavaScriptEditor.java index f0407e1bb..9c6754ada 100644 --- a/app/src/processing/mode/javascript/JavaScriptEditor.java +++ b/app/src/processing/mode/javascript/JavaScriptEditor.java @@ -82,6 +82,13 @@ public class JavaScriptEditor extends Editor } }); + JMenuItem openInBrowserItem = Base.newJMenuItem("Reopen in Browser", 'B'); + openInBrowserItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + handleOpenInBrowser(); + } + }); + JMenuItem stopServerItem = new JMenuItem("Stop Server"); stopServerItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -112,7 +119,7 @@ public class JavaScriptEditor extends Editor }); return buildSketchMenu(new JMenuItem[] { - startServerItem, stopServerItem, + startServerItem, openInBrowserItem, stopServerItem, copyServerAddressItem, setServerPortItem }); } @@ -449,12 +456,11 @@ public class JavaScriptEditor extends Editor * export to folder, start server, open in default browser. */ public void handleStartServer () - { - System.out.println(); + { statusEmpty(); - System.out.println(); if ( !handleExport( false ) ) return; + File serverRoot = getExportFolder(); // if server hung or something else went wrong .. stop it. if ( jsServer != null && @@ -469,6 +475,10 @@ public class JavaScriptEditor extends Editor jsServer = createJavaScriptServer(); jsServer.start(); + // a little delay to give the server time to kick in .. + long ts = System.currentTimeMillis(); + while ( System.currentTimeMillis() - ts < 200 ) {} + while ( !jsServer.isRunning() ) {} String location = jsServer.getAddress(); @@ -486,8 +496,16 @@ public class JavaScriptEditor extends Editor toolbar.activate(JavaScriptToolbar.RUN); } + private void handleOpenInBrowser () + { + if ( jsServer != null && jsServer.isRunning() ) + { + Base.openURL( jsServer.getAddress() ); + } + } + private JavaScriptServer createJavaScriptServer () - { + { if ( jsServer != null ) return jsServer; jsServer = new JavaScriptServer( getExportFolder() ); @@ -526,7 +544,7 @@ public class JavaScriptEditor extends Editor * Call the export method of the sketch and handle the gui stuff */ public boolean handleExport ( boolean openFolder ) - { + { if ( !handleExportCheckModified() ) { return false; diff --git a/app/src/processing/mode/javascript/JavaScriptServer.java b/app/src/processing/mode/javascript/JavaScriptServer.java index 326877143..d9e6a3e3e 100644 --- a/app/src/processing/mode/javascript/JavaScriptServer.java +++ b/app/src/processing/mode/javascript/JavaScriptServer.java @@ -117,6 +117,7 @@ class JavaScriptServer implements HttpConstants, Runnable ds.setReuseAddress(true); return true; } catch (IOException e) { + e.printStackTrace(); } finally { if (ds != null) { ds.close(); @@ -216,6 +217,10 @@ class JavaScriptServer implements HttpConstants, Runnable (new Thread(ws, "ProcessingJSServer Worker")).start(); } } + else + { + System.err.println( "Server is null. Bad. Really." ); + } } catch ( IOException ioe ) { // happens on shutDown(), ignore .. //System.err.println(ioe);