After much searching, browsing, emails... I've got it...
Microsoft did not implement the "Java console" for j# Browser Controls
and maybe never will...
I've came across source code for simple java console at:
http://alpha.comweb.nl/java/Console/Console.html and compiled it into my project.
How to use:
1) install Microsoft Supplemental UI Library for Visual J# .NET v1.1
from:
http://www.microsoft.com/downloads/details.aspx?FamilyId=789DAC0D-2CCF-4021-A943-A1C4802E1568&displaylang=en (for swing support)
2) add the following source code to your project
3) add: "new console()" to constructor or where ever fit.
4) enjoy!
5) remove after all bugs are dead.
6) you can skip step 5 and include the code in your Debug class if
exists.
Source Code:
//
// A simple Java Console for your application (Swing version)
// Requires Java 1.1.5 or higher
//
// Disclaimer the use of this source is at your own risk.
//
// Permission to use and distribute into your own applications
//
// RJHM van den Bergh , rvdb@comweb.nl
package walldata.WDContainer;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Console extends WindowAdapter implements WindowListener,
ActionListener, Runnable
{
private JFrame frame;
private JTextArea textArea;
private Thread reader;
private Thread reader2;
private boolean quit;
private final PipedInputStream pin=new PipedInputStream();
private final PipedInputStream pin2=new PipedInputStream();
Thread errorThrower; // just for testing (Throws an Exception at this
Console
public Console()
{
// create all components and add them
frame=new JFrame("Java Console");
Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize=new
Dimension((int)(screenSize.width/2),(int)(screenSize.height/2));
int x=(int)(frameSize.width/2);
int y=(int)(frameSize.height/2);
frame.setBounds(x,y,frameSize.width,frameSize.height);
textArea=new JTextArea();
textArea.setEditable(false);
JButton button=new JButton("clear");
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(new
JScrollPane(textArea),BorderLayout.CENTER);
frame.getContentPane().add(button,BorderLayout.SOUTH);
frame.setVisible(true);
frame.addWindowListener(this);
button.addActionListener(this);
try
{
PipedOutputStream pout=new PipedOutputStream(this.pin);
System.setOut(new PrintStream(pout,true));
}
catch (java.io.IOException io)
{
textArea.append("Couldn't redirect STDOUT to this
console\n"+io.getMessage());
}
catch (SecurityException se)
{
textArea.append("Couldn't redirect STDOUT to this
console\n"+se.getMessage());
}
try
{
PipedOutputStream pout2=new PipedOutputStream(this.pin2);
System.setErr(new PrintStream(pout2,true));
}
catch (java.io.IOException io)
{
textArea.append("Couldn't redirect STDERR to this
console\n"+io.getMessage());
}
catch (SecurityException se)
{
textArea.append("Couldn't redirect STDERR to this
console\n"+se.getMessage());
}
quit=false; // signals the Threads that they should exit
// Starting two separate threads to read from the PipedInputStreams
//
reader=new Thread(this);
reader.setDaemon(true);
reader.start();
//
reader2=new Thread(this);
reader2.setDaemon(true);
reader2.start();
errorThrower=new Thread(this);
errorThrower.setDaemon(true);
errorThrower.start();
}
public synchronized void windowClosed(WindowEvent evt)
{
quit=true;
this.notifyAll(); // stop all threads
try { reader.join(1000);pin.close(); }
catch (Exception e){}
try { reader2.join(1000);pin2.close(); }
catch (Exception e){}
System.exit(0);
}
public synchronized void windowClosing(WindowEvent evt)
{
frame.setVisible(false); // default behaviour of JFrame
frame.dispose();
}
public synchronized void actionPerformed(ActionEvent evt)
{
textArea.setText("");
}
public synchronized void run()
{
try
{
while (Thread.currentThread()==reader)
{
try { this.wait(100);}
catch(InterruptedException ie) {}
if (pin.available()!=0)
{
String input=this.readLine(pin);
textArea.append(input);
}
if (quit) return;
}
while (Thread.currentThread()==reader2)
{
try
{
this.wait(100);
}
catch(InterruptedException ie) {}
if (pin2.available()!=0)
{
String input=this.readLine(pin2);
textArea.append(input);
}
if (quit) return;
}
}
catch (Exception e)
{
textArea.append("\nConsole reports an Internal error.");
textArea.append("The error is: "+e);
}
}
public synchronized String readLine(PipedInputStream in) throws
IOException
{
String input="";
do
{
int available=in.available();
if (available==0) break;
byte b[]=new byte[available];
in.read(b);
input=input+new String(b,0,b.length);
} while( !input.endsWith("\n") && !input.endsWith("\r\n") && !quit);
return input;
}