add ANSI colour support to output pane

This commit is contained in:
krakjoe 2013-11-29 08:57:29 +00:00
parent f822764129
commit 883f34f487
14 changed files with 3 additions and 694 deletions

View File

@ -1,4 +1,4 @@
#Thu, 28 Nov 2013 22:53:51 +0000
#Fri, 29 Nov 2013 08:22:06 +0000
/home/joe/NetBeansProjects/phpdbg-ui=
/usr/src/phpdbg/tutorials/java=

Binary file not shown.

View File

@ -55,7 +55,7 @@ javadoc.splitindex=true
javadoc.use=true
javadoc.version=false
javadoc.windowtitle=
main.class=Main
main.class=phpdbg.ui.Main
manifest.file=manifest.mf
meta.inf.dir=${src.dir}/META-INF
mkdist.disabled=false

View File

@ -1,90 +0,0 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Manage input and output data
* @author krakjoe
*/
public class DBGThread extends Socket implements Runnable {
private final Boolean reader;
private final Main main;
private Boolean quit;
public DBGThread(final String host, final Integer port, final Main main, Boolean reader) throws IOException {
super(host, port);
this.main = main;
this.reader = reader;
this.quit = false;
main.setConnected(true);
}
public void quit() {
synchronized(this) {
quit = true;
this.notifyAll();
}
}
@Override public void run() {
try {
synchronized(this) {
do {
if (reader) {
String command;
OutputStream output = getOutputStream();
this.wait();
command = main.getInputField().getText();
/* send command to stdin socket */
if (command != null) {
output.write(
command.getBytes());
output.write("\n".getBytes());
output.flush();
}
main.getInputField().setText(null);
} else {
InputStream input = getInputStream();
/* get data from stdout socket */
byte[] bytes = new byte[1];
do {
/* this is some of the laziest programming I ever done */
if (input.available() == 0) {
this.wait(666);
continue;
}
if (input.read(bytes, 0, 1) > -1) {
main.getOutputField().setCaretPosition(
main.getOutputField().getText().length());
main.getOutputField().append(new String(bytes));
}
} while (!quit);
}
} while(!quit);
}
} catch (IOException | InterruptedException ex) {
if (!quit) {
main.messageBox(ex.getMessage());
}
} finally {
try {
close();
} catch (IOException ex) { /* naughty me */ } finally {
main.setConnected(false);
}
}
}
}

View File

@ -1,47 +0,0 @@
import java.util.ArrayList;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Implement a simple history list for command input
* @author krakjoe
*/
public class History extends ArrayList<String> {
private Integer position = new Integer(0);
public History() {
super();
}
@Override public boolean add(String text) {
String last = last();
if (text != null) {
if (last == null || !last.equals(text)) {
if (super.add(text)) {
position = size();
return true;
}
}
}
return false;
}
public String last() {
if (position >= 1) {
position--;
return get(position);
} else return new String();
}
public String next() {
if (position+1 < size()) {
position++;
return get(position);
} else return new String();
}
}

View File

@ -1,188 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
<NonVisualComponents>
<Container class="javax.swing.JPopupMenu" name="stdoutPopupMenu">
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout">
<Property name="useNullLayout" type="boolean" value="true"/>
</Layout>
<SubComponents>
<MenuItem class="javax.swing.JMenuItem" name="resetStdout">
<Properties>
<Property name="text" type="java.lang.String" value="Clear"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="resetStdoutActionPerformed"/>
</Events>
</MenuItem>
</SubComponents>
</Container>
</NonVisualComponents>
<Properties>
<Property name="defaultCloseOperation" type="int" value="2"/>
<Property name="title" type="java.lang.String" value="phpdbg jui"/>
</Properties>
<SyntheticProperties>
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
<SyntheticProperty name="generateCenter" type="boolean" value="false"/>
</SyntheticProperties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="mainSplit" max="32767" attributes="0"/>
<Group type="102" attributes="0">
<Component id="hostLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="host" pref="359" max="32767" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="stdinCheckBox" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="stdinPort" min="-2" pref="60" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="stdoutCheckBox" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="stdoutPort" min="-2" pref="60" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="openButton" min="-2" max="-2" attributes="0"/>
</Group>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="mainSplit" pref="428" max="32767" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" max="-2" attributes="0">
<Component id="stdoutPort" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="stdinCheckBox" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="stdoutCheckBox" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="stdinPort" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="host" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="openButton" alignment="0" max="32767" attributes="0"/>
<Component id="hostLabel" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Container class="javax.swing.JSplitPane" name="mainSplit">
<Properties>
<Property name="orientation" type="int" value="0"/>
<Property name="toolTipText" type="java.lang.String" value=""/>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JTextField" name="input">
<Properties>
<Property name="toolTipText" type="java.lang.String" value=""/>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
<Events>
<EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="inputKeyReleased"/>
</Events>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
<JSplitPaneConstraints position="left"/>
</Constraint>
</Constraints>
</Component>
<Container class="javax.swing.JScrollPane" name="outScrollPane">
<AuxValues>
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
<JSplitPaneConstraints position="right"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JTextArea" name="output">
<Properties>
<Property name="editable" type="boolean" value="false"/>
<Property name="columns" type="int" value="20"/>
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="DialogInput" size="12" style="0"/>
</Property>
<Property name="rows" type="int" value="5"/>
<Property name="componentPopupMenu" type="javax.swing.JPopupMenu" editor="org.netbeans.modules.form.ComponentChooserEditor">
<ComponentRef name="stdoutPopupMenu"/>
</Property>
</Properties>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
<Component class="javax.swing.JTextField" name="host">
<Properties>
<Property name="text" type="java.lang.String" value="127.0.0.1"/>
<Property name="toolTipText" type="java.lang.String" value="Set the hostname, or IPv4 address of the machine running the phpdbg remote console server"/>
</Properties>
</Component>
<Component class="javax.swing.JTextField" name="stdoutPort">
<Properties>
<Property name="text" type="java.lang.String" value="8000"/>
<Property name="toolTipText" type="java.lang.String" value=""/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="stdinCheckBox">
<Properties>
<Property name="selected" type="boolean" value="true"/>
<Property name="text" type="java.lang.String" value="stdin:"/>
<Property name="toolTipText" type="java.lang.String" value="Set the port for stdin, or uncheck to disable stdin"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="stdoutCheckBox">
<Properties>
<Property name="selected" type="boolean" value="true"/>
<Property name="text" type="java.lang.String" value="stdout:"/>
<Property name="toolTipText" type="java.lang.String" value="Set the port for stdout, or unset to disable stdout"/>
</Properties>
</Component>
<Component class="javax.swing.JButton" name="openButton">
<Properties>
<Property name="actionCommand" type="java.lang.String" value="open"/>
<Property name="label" type="java.lang.String" value="open"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openButtonActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JTextField" name="stdinPort">
<Properties>
<Property name="text" type="java.lang.String" value="4000"/>
<Property name="toolTipText" type="java.lang.String" value=""/>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="hostLabel">
<Properties>
<Property name="text" type="java.lang.String" value="Hostname:"/>
</Properties>
</Component>
</SubComponents>
</Form>

View File

@ -1,366 +0,0 @@
import static java.awt.event.KeyEvent.VK_DOWN;
import static java.awt.event.KeyEvent.VK_ENTER;
import static java.awt.event.KeyEvent.VK_UP;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author krakjoe
*/
public class Main extends javax.swing.JDialog {
/**
* Creates user interface
* @param parent
* @param modal
*/
public Main(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
stdoutPopupMenu = new javax.swing.JPopupMenu();
resetStdout = new javax.swing.JMenuItem();
mainSplit = new javax.swing.JSplitPane();
input = new javax.swing.JTextField();
outScrollPane = new javax.swing.JScrollPane();
output = new javax.swing.JTextArea();
host = new javax.swing.JTextField();
stdoutPort = new javax.swing.JTextField();
stdinCheckBox = new javax.swing.JCheckBox();
stdoutCheckBox = new javax.swing.JCheckBox();
openButton = new javax.swing.JButton();
stdinPort = new javax.swing.JTextField();
hostLabel = new javax.swing.JLabel();
resetStdout.setText("Clear");
resetStdout.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
resetStdoutActionPerformed(evt);
}
});
stdoutPopupMenu.add(resetStdout);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("phpdbg jui");
mainSplit.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
mainSplit.setToolTipText("");
input.setToolTipText("");
input.setEnabled(false);
input.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
inputKeyReleased(evt);
}
});
mainSplit.setLeftComponent(input);
output.setEditable(false);
output.setColumns(20);
output.setFont(new java.awt.Font("DialogInput", 0, 12)); // NOI18N
output.setRows(5);
output.setComponentPopupMenu(stdoutPopupMenu);
outScrollPane.setViewportView(output);
mainSplit.setRightComponent(outScrollPane);
host.setText("127.0.0.1");
host.setToolTipText("Set the hostname, or IPv4 address of the machine running the phpdbg remote console server");
stdoutPort.setText("8000");
stdoutPort.setToolTipText("");
stdinCheckBox.setSelected(true);
stdinCheckBox.setText("stdin:");
stdinCheckBox.setToolTipText("Set the port for stdin, or uncheck to disable stdin");
stdoutCheckBox.setSelected(true);
stdoutCheckBox.setText("stdout:");
stdoutCheckBox.setToolTipText("Set the port for stdout, or unset to disable stdout");
openButton.setActionCommand("open");
openButton.setLabel("open");
openButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openButtonActionPerformed(evt);
}
});
stdinPort.setText("4000");
stdinPort.setToolTipText("");
hostLabel.setText("Hostname:");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(mainSplit)
.addGroup(layout.createSequentialGroup()
.addComponent(hostLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(host, javax.swing.GroupLayout.DEFAULT_SIZE, 359, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(stdinCheckBox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(stdinPort, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(stdoutCheckBox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(stdoutPort, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(openButton)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(mainSplit, javax.swing.GroupLayout.DEFAULT_SIZE, 428, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
.addComponent(stdoutPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(stdinCheckBox)
.addComponent(stdoutCheckBox)
.addComponent(stdinPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(host, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(openButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(hostLabel))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void inputKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_inputKeyReleased
switch (evt.getKeyCode()) {
case VK_ENTER: {
if (in != null) {
history.add(input.getText());
synchronized(in) {
in.notifyAll();
}
}
} break;
case VK_UP: {
String last = history.last();
if (last.length() > 0) {
input.setText(last);
}
} break;
case VK_DOWN: {
String next = history.next();
if (next.length() > 0) {
input.setText(next);
}
} break;
}
}//GEN-LAST:event_inputKeyReleased
private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openButtonActionPerformed
try {
if (!connected) {
Integer ports[] = new Integer[2];
String address = getHost();
if (address != null) {
ports[0] = stdinCheckBox.isSelected() ? getStdinPort() : -1;
ports[1] = stdoutCheckBox.isSelected() ? getStdoutPort() : -1;
if (ports[0] != 0 && ports[1] != 0) {
if (stdinCheckBox.isSelected()) {
if (ports[0] > 0) {
in = new DBGThread(
address, ports[0], this, true);
new Thread(in).start();
}
}
if (stdoutCheckBox.isSelected()) {
if (ports[1] > 0) {
out = new DBGThread(
address, ports[1], this, false);
new Thread(out).start();
}
}
}
}
} else {
if (in != null) {
in.quit();
}
if (out != null) {
out.quit();
}
}
} catch (IOException ex) {
messageBox(ex.getMessage());
}
}//GEN-LAST:event_openButtonActionPerformed
private void resetStdoutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetStdoutActionPerformed
// TODO add your handling code here:
output.setText(null);
}//GEN-LAST:event_resetStdoutActionPerformed
public void setConnected(Boolean isConnected) {
synchronized(this) {
if (isConnected) {
connected = true;
openButton.setText("Disconnect");
host.setEnabled(false);
stdinPort.setEnabled(false);
stdinCheckBox.setEnabled(false);
if (stdinCheckBox.isSelected()) {
input.setEnabled(true);
} else input.setEnabled(false);
stdoutPort.setEnabled(false);
stdoutCheckBox.setEnabled(false);
} else {
connected = false;
openButton.setText("Connect");
host.setEnabled(true);
stdinPort.setEnabled(true);
input.setEnabled(false);
stdinCheckBox.setEnabled(true);
stdoutPort.setEnabled(true);
stdoutCheckBox.setEnabled(true);
}
}
}
public JTextField getInputField() { return input; }
public JTextArea getOutputField() { return output; }
public String getHost() {
String address = host.getText();
if (address != null && address.length() > 0) {
return address;
} else {
messageBox("Invalid hostname provided !");
}
return null;
}
public Integer getStdinPort() {
try {
return Integer.parseInt(stdinPort.getText());
} catch (NumberFormatException ex) {
messageBox("Invalid stdin port provided !");
}
return 0;
}
public Integer getStdoutPort() {
try {
return Integer.parseInt(stdoutPort.getText());
} catch (NumberFormatException ex) {
messageBox("Invalid stdout port provided !");
}
return 0;
}
public synchronized void messageBox(String message) {
JOptionPane.showMessageDialog(this, message);
}
/**
* @param args the command line arguments
*/
public static void main(final String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the dialog */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override public void run() {
dialog = new Main(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
if (in != null)
in.quit();
if (out != null)
out.quit();
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
private static DBGThread in;
private static DBGThread out;
private static Main dialog;
private static Boolean connected = false;
private static History history = new History();
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JTextField host;
private javax.swing.JLabel hostLabel;
private javax.swing.JTextField input;
private javax.swing.JSplitPane mainSplit;
private javax.swing.JButton openButton;
private javax.swing.JScrollPane outScrollPane;
private javax.swing.JTextArea output;
private javax.swing.JMenuItem resetStdout;
private javax.swing.JCheckBox stdinCheckBox;
private javax.swing.JTextField stdinPort;
private javax.swing.JCheckBox stdoutCheckBox;
private javax.swing.JPopupMenu stdoutPopupMenu;
private javax.swing.JTextField stdoutPort;
// End of variables declaration//GEN-END:variables
}