felix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Per-Erik Svensson <pererik.svens...@gmail.com>
Subject Gogo Swing?
Date Sun, 14 Aug 2011 19:33:51 GMT
Hi,

I'm currently trying to set up a swing frame to display and send commands to
gogo shell. In doing so, I thought it would be ok to do the following

CommandProcessor processor = ...

PipedInputStream outReader = new PipedInputStream();
PrintStream out = new PrintStream(new PipedOutputStream(outReader));

CommandSession session = processor.createSession(System.in, out, out);

And then to "send commands" just using

session.execute(command);

And then read my PipedInputStream (outReader) to echo anything that is
written to "out" into my JFrame. (And if session.execute returns a non-null
object use the session.format to print it to my JFrame directly.)

All this works fine and swell until I try to pipe commands as in

lb | grep org.apache.felix

That command works, but someone is then killing the thread of the "out"
stream because next time I read my PipedInputStream (outReader) i get:

java.io.IOException Pipe broken
    java.io.PipedInputStream.read(PipedInputStream.java:305)
    java.io.PipedInputStream.read(PipedInputStream.java:361)
    java.io.InputStream.read(InputStream.java:85)

net.steamingbeans.runrun.ui.StdOutReader.doInBackground(StdOutReader.java:59)

net.steamingbeans.runrun.ui.StdOutReader.doInBackground(StdOutReader.java:22)
    javax.swing.SwingWorker$1.call(SwingWorker.java:277)
    java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    java.util.concurrent.FutureTask.run(FutureTask.java:138)
    javax.swing.SwingWorker.run(SwingWorker.java:316)

java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    java.lang.Thread.run(Thread.java:619)

Which, as far as I know, only occurs if the thread of the writer is dead
(the writer being "out" above).

So, now I'm guessing that I'm doing things wrong. Any suggestions would be
greatly appreciated. The reason I'm doing this is two-fold

a) The command prompt of windows... well.. isn't that great. Copy-Paste is a
starter! :)
b) Our app isn't run through a command prompt so System.out, System.in isn't
really available but it would still be neat to be able to for example list
running bundles and all that good stuff. Mainly for debugging purposes that
is.

As I said, any help would be great! :)

Best regards,
Per-Erik Svensson

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message