diff --git a/processing/app/PdeEditor.java b/processing/app/PdeEditor.java index 3eb4d43cb..6fc9843d7 100644 --- a/processing/app/PdeEditor.java +++ b/processing/app/PdeEditor.java @@ -988,7 +988,8 @@ implements MRJAboutHandler, MRJQuitHandler, MRJPrefsHandler Thread thread; public RunButtonWatcher() { - thread = new Thread(this); + thread = new Thread(this, "run button watcher"); + thread.setPriority(Thread.MIN_PRIORITY); thread.start(); } diff --git a/processing/app/PdeMessageSiphon.java b/processing/app/PdeMessageSiphon.java index cdacc4181..844a28f0b 100644 --- a/processing/app/PdeMessageSiphon.java +++ b/processing/app/PdeMessageSiphon.java @@ -30,8 +30,8 @@ class PdeMessageSiphon implements Runnable { Thread thread; PdeMessageConsumer consumer; - public PdeMessageSiphon(InputStream stream, PdeMessageConsumer consumer) { + public PdeMessageSiphon(InputStream stream, PdeMessageConsumer consumer) { // we use a BufferedReader in order to be able to read a line // at a time // @@ -39,40 +39,62 @@ class PdeMessageSiphon implements Runnable { this.consumer = consumer; thread = new Thread(this); + thread.setPriority(Thread.MIN_PRIORITY); thread.start(); } public void run() { - while (Thread.currentThread() == thread) { - //System.err.print("p"); - //System.err.println(streamReader); - String currentLine; + //while (Thread.currentThread() == thread) { + //System.err.print("p"); + //System.err.println(streamReader); + String currentLine; - try { - // process data until we hit EOF; this may block - // - while ((currentLine = streamReader.readLine()) != null) { - consumer.message(currentLine); - //System.err.println("PMS: " + currentLine); + try { + // process data until we hit EOF; this will happily block + // (effectively sleeping the thread) until new data comes in. + // when the program is finally done, + // + while ((currentLine = streamReader.readLine()) != null) { + //currentLine = streamReader.readLine(); + //if (currentLine != null) { + consumer.message(currentLine); + //System.out.println("siphon wait"); + } + /* + if (currentLine == null) { + System.out.println("PdeMessageSiphon: out"); + thread = null; } - } catch (NullPointerException npe) { - // ignore this guy, since it's prolly just shutting down - //npe.printStackTrace(); + */ + thread = null; + //System.err.println("PMS: " + currentLine); + //} + + } catch (NullPointerException npe) { + // ignore this guy, since it's prolly just shutting down + //npe.printStackTrace(); + thread = null; + + } catch (Exception e) { + // on linux, a "bad file descriptor" message comes up when + // closing an applet that's being run externally. + // use this to cause that to fail silently since not important + if ((PdeBase.platform != PdeBase.LINUX) || + (e.getMessage().indexOf("Bad file descriptor") == -1)) { + System.err.println("PdeMessageSiphon err " + e); + e.printStackTrace(); thread = null; - - } catch (Exception e) { - // on linux, a "bad file descriptor" message comes up when - // closing an applet that's being run externally. - // use this to cause that to fail silently since not important - if ((PdeBase.platform != PdeBase.LINUX) || - (e.getMessage().indexOf("Bad file descriptor") == -1)) { - System.err.println("PdeMessageSiphon err " + e); - e.printStackTrace(); - thread = null; - } } } - //System.err.println("siphon thread exiting"); + + /* + //Thread.yield(); + try { + Thread.sleep(100); + } catch (InterruptedException e) { } + */ + //System.out.println("PdeMessageSiphon: out"); } + //System.err.println("siphon thread exiting"); } diff --git a/processing/app/PdeRuntime.java b/processing/app/PdeRuntime.java index 7da786719..6b9fb1bb9 100644 --- a/processing/app/PdeRuntime.java +++ b/processing/app/PdeRuntime.java @@ -24,17 +24,11 @@ import processing.core.*; -import java.awt.*; // for window -import java.awt.event.*; // also for window +import java.awt.*; +import java.awt.event.*; import java.io.*; import java.lang.reflect.*; -//#ifndef RXTX -//import javax.comm.*; -//#else -//import gnu.io.*; -//#endif - public class PdeRuntime implements PdeMessageConsumer { @@ -94,25 +88,26 @@ public class PdeRuntime implements PdeMessageConsumer { windowLocation.x + "," + windowLocation.y) : (PApplet.EXT_LOCATION + x1 + "," + y1); + //java "-Djava.library.path=C:\Documents and Settings\fry\My Documents\sketchbook\image_loading_problems\code" -cp "lib\build;java\lib\rt.jar;lib;lib\build;lib\pde.jar;lib\core.jar;lib\mrj.jar;lib\antlr.jar;lib\oro.jar;C:\WINDOWS\system32\QTJava.zip;;C:\Documents and Settings\fry\My Documents\sketchbook\image_loading_problems\code" processing.core.PApplet --location=710,61 "--sketch-folder=C:\Documents and Settings\fry\My Documents\sketchbook\image_loading_problems" Temporary_6879_7583 String command[] = new String[] { "java", "-Djava.library.path=" + sketch.libraryPath, // might be "" "-cp", sketch.classPath, "processing.core.PApplet", - //PApplet.EXTERNAL_FLAG + location, location, PApplet.EXT_SKETCH_FOLDER + sketch.folder.getAbsolutePath(), sketch.mainClassName }; - //PApplet.println(command); + //PApplet.println(PApplet.join(command, " ")); process = Runtime.getRuntime().exec(command); - new PdeMessageSiphon(process.getErrorStream(), this); new SystemOutSiphon(process.getInputStream()); + //new PdeMessageSiphon(process.getErrorStream(), this); + new PdeMessageSiphon(process.getErrorStream(), this); processOutput = process.getOutputStream(); - } else { + } else { // !externalRuntime //Class c = Class.forName(className); Class c = Class.forName(sketch.mainClassName); applet = (PApplet) c.newInstance(); @@ -525,31 +520,60 @@ java.lang.NullPointerException this.input = input; thread = new Thread(this); + thread.setPriority(Thread.MIN_PRIORITY); thread.start(); } public void run() { byte boofer[] = new byte[1024]; - try { - while (true) { - //int count = input.available(); - //int offset = 0; + while (Thread.currentThread() == thread) { + // read, block until something good comes through + //if (input.available() > 0) { + try { int count = input.read(boofer, 0, boofer.length); if (count == -1) break; - System.out.print(new String(boofer, 0, count)); - } + //System.out.print("bc" + count + " " + new String(boofer, 0, count)); + - /* - int c; - while ((c = input.read()) != -1) { - System.out.print((char) c); + } catch (IOException e) { + thread = null; } - */ - } catch (Exception e) { - System.err.println("SystemOutSiphon error " + e); - e.printStackTrace(); + //System.out.println("SystemOutSiphon: out"); + //thread = null; + } + } + + + /* + //while (Thread.currentThread() == thread) { + //try { + //while (true) { + //int count = input.available(); + //int offset = 0; + int count = input.read(boofer, 0, boofer.length); + if (count == -1) { + System.out.println("SystemOutSiphon: out"); + thread = null; + } + //if (count != -1) { + if (count > 0) { + System.out.print(new String(boofer, 0, count)); + } + //} + //} + + } catch (Exception e) { + System.err.println("SystemOutSiphon error " + e); + e.printStackTrace(); + } + //Thread.yield(); + try { + Thread.sleep(100); + } catch (InterruptedException e) { } } } + */ + } } diff --git a/processing/core/PApplet.java b/processing/core/PApplet.java index dee12e931..1e9aa11ec 100644 --- a/processing/core/PApplet.java +++ b/processing/core/PApplet.java @@ -1526,6 +1526,7 @@ public class PApplet extends Applet gimmeImage(getClass().getResource("data/" + filename), force); } if (awtimage == null) { + /* try { //FileInputStream fis = //new FileInputStream(folder + "data/" + filename); @@ -1534,6 +1535,7 @@ public class PApplet extends Applet } catch (IOException e) { e.printStackTrace(); } + */ } } if (awtimage == null) { @@ -2764,6 +2766,7 @@ public class PApplet extends Applet Thread thread = new Thread() { //new Runnable() { public void run() { + while ((Thread.currentThread() == this) && !finished) { try { // is this what's causing all the trouble? @@ -2845,6 +2848,7 @@ public class PApplet extends Applet name = args[argIndex]; break; } + argIndex++; } Frame frame = new Frame();