title: Output not getting redirecting to proper Jtextarea
body: <pre><code>MainFrame.java
  
  import java.awt.BorderLayout;
  import java.awt.Component;
  import java.awt.Dimension;
  import java.awt.Event;
  import java.awt.GridLayout;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.awt.event.KeyEvent;
  
  import javax.swing.JButton;
  import javax.swing.JCheckBoxMenuItem;
  import javax.swing.JComponent;
  import javax.swing.JFrame;
  import javax.swing.JLabel;
  import javax.swing.JMenu;
  import javax.swing.JMenuBar;
  import javax.swing.JMenuItem;
  import javax.swing.JOptionPane;
  import javax.swing.JPanel;
  import javax.swing.JSplitPane;
  import javax.swing.JTabbedPane;
  import javax.swing.JTextArea;
  import javax.swing.JTextField;
  import javax.swing.JToolBar;
  import javax.swing.KeyStroke;
  
  
  public class MainFrame extends JFrame{
  
      private TextPanel textPanel1;
      private TextPanel textPanel2;
      private FormPanel formPanel;
      private JSplitPane splitPane;
      private JTabbedPane tabPane;
  
      public MainFrame() {
  
          super("Hello");
  
          setLayout(new BorderLayout());
          tabPane = new JTabbedPane();        
  
          textPanel1 = new TextPanel();
          tabPane.addTab("Tab 1", textPanel1);
  
          textPanel2 = new TextPanel();
          tabPane.addTab("Tab 2", textPanel2);
  
          //Newly Added code
          formPanel = new FormPanel(textPanel1,textPanel2);
  
          splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,formPanel,tabPane);
  
          splitPane.setOneTouchExpandable(true);
  
          add(splitPane,BorderLayout.CENTER);
  //      add(formPanel,BorderLayout.WEST);
  
  
          setVisible(true);
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          setMinimumSize(new Dimension(500, 400));
          setSize(600, 500);
  
      }
  
  }
  </code></pre>
  
  <p>TextPanel.java</p>
  
  <pre><code>import java.awt.BorderLayout;
  import java.awt.Button;
  import java.awt.Scrollbar;
  import java.io.ByteArrayOutputStream;
  
  import javax.swing.JPanel;
  import javax.swing.JScrollPane;
  import javax.swing.JTextArea;
  import javax.swing.SwingWorker;
  
  
  public class TextPanel extends JPanel {
  
      private JTextArea textArea1;
      private JTextArea textArea2;
      private FormPanel formPanel;
      //Newly added code 
      private TextPanel textPanel;
      public TextPanel(){
  
          setLayout(new BorderLayout());
  
          textArea1 = new JTextArea();
          add(new JScrollPane(textArea1),BorderLayout.CENTER);
  
          //textArea2 = new JTextArea();
          //add(new JScrollPane(textArea2),BorderLayout.CENTER);
  
  
      }
      //Newly added code      
          public void appendText(String string, TextPanel textPanel2) {
      // TODO Auto-generated method stub
      this.textPanel = textPanel2;                                                                                                                                                                                                                                                                                                                                                
      textArea1.append(string);   
  }
  
  
  }
  </code></pre>
  
  <p>FormPanel.java</p>
  
  <pre><code>import java.awt.Dimension;
  import java.awt.GridBagConstraints;
  import java.awt.GridBagLayout;
  import java.awt.Insets;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.awt.event.KeyEvent;
  import java.io.ObjectInputStream.GetField;
  
  import javax.swing.BorderFactory;
  import javax.swing.ButtonGroup;
  import javax.swing.DefaultComboBoxModel;
  import javax.swing.DefaultListModel;
  import javax.swing.JButton;
  import javax.swing.JCheckBox;
  import javax.swing.JComboBox;
  import javax.swing.JLabel;
  import javax.swing.JList;
  import javax.swing.JPanel;
  import javax.swing.JRadioButton;
  import javax.swing.JTabbedPane;
  import javax.swing.JTextField;
  import javax.swing.border.Border;
  
  
  public class FormPanel extends JPanel {
  
      private static int numberOfTabs = 1;
      private JLabel serverName_1;
      private JLabel serverName_2;
      private JButton startServer_1;
      private JButton startServer_2;
      //Added New Code
      private TextPanel textPanel1;
      private TextPanel textPanel2; 
      JumpHosts jumpHosts = new JumpHosts();
  
      //Added New Code
      public FormPanel(final TextPanel textPanel1,final TextPanel textPanel2){
  
          Dimension dim  = getPreferredSize();
          dim.width = 350;
          setPreferredSize(dim);
          setMinimumSize(dim);
  
  
          //Added New Code
          this.textPanel = textPanel1;
          this.textPanel = textPanel2;
  
          serverName_1 = new JLabel("server1 ");
          startServer_1 = new JButton("Start");
  
          serverName_2 = new JLabel("server2 ");
          startServer_2 = new JButton("Start");
  
  
          startServer_1.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
  
                  String[] ev = new String[]{"username@10.10.10.10","username@server1"};
                  String cmd = "ls -ltr";
                  //jumpHosts.JumpHosts(ev,cmd);
                  //Newly added code
                  jumpHosts.JumpHosts(ev,cmd,textPanel1);
  
              }
          });
  
          startServer_2.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
  
                  String[] ev = new String[]{"username@10.10.10.10","username@server2"};
                  String cmd = "ls -ltr";
                  //jumpHosts.JumpHosts(ev,cmd);
                  //Newly added code
                  jumpHosts.JumpHosts(ev,cmd,textPanel2);
  
              }
          });
  
          Border innerborder = BorderFactory.createTitledBorder("Detail");
          Border outerborder = BorderFactory.createEmptyBorder(5, 5, 5, 5);
  
          setBorder(BorderFactory.createCompoundBorder(outerborder, innerborder));
  
          layoutComponents();
      }
  
      public void layoutComponents(){
  
          setLayout(new GridBagLayout());
  
          GridBagConstraints gc = new GridBagConstraints();
  
  
          //////////// First row ////////////
          gc.gridy = 0;
  
          gc.weightx = 1;
          gc.weighty = 0.01;
  
          gc.gridx = 0;
          gc.insets = new Insets(0, 0, 0, 5);
          gc.anchor = GridBagConstraints.FIRST_LINE_START;
          add(serverName_1,gc);
  
          /////////// Next Column ////////////
          gc.gridy = 0;
  
          gc.weightx = 2;
          gc.weighty = 0.01;
  
          gc.gridx = 2;
          gc.insets = new Insets(0, 0, 0, 5);
          gc.anchor = GridBagConstraints.FIRST_LINE_START;
          add(startServer_1,gc);
  
          //////////// Second row ////////////
          gc.gridy++;
  
          gc.weightx = 1;
          gc.weighty = 0.1;
  
          gc.gridx = 0;
          gc.insets = new Insets(0, 0, 0, 5);
          gc.anchor = GridBagConstraints.FIRST_LINE_START;
          add(serverName_2,gc);
  
          /////////// Next Column ////////////
          //gc.gridy = 1;
  
          gc.weightx = 2;
          gc.weighty = 0.1;
  
          gc.gridx = 2;
          gc.insets = new Insets(0, 0, 0, 5);
          gc.anchor = GridBagConstraints.FIRST_LINE_START;
          add(startServer_2,gc);
  
      }
  
  }
  </code></pre>
  
  <p>JumpHosts.java</p>
  
  <pre><code>    import com.jcraft.jsch.*;
      import java.awt.*;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.OutputStream;
  
      import javax.swing.*;
  
      public class JumpHosts {
  
          TextPanel textPanel = new TextPanel();
  
  //Newly added code
  public void JumpHosts(final String[] arg,final String command,final TextPanel textPanel) {
  
          StringBuffer resultDisplayBuffer = new StringBuffer();
  
          SwingWorker sw = new SwingWorker(){
  
                  @Override
                  protected Object doInBackground() throws Exception {
                      try{
                            JSch jsch = new JSch();
  
                            if(arg.length &lt;= 1){
                              System.out.println("This program expects more arguments.");
                              System.exit(-1);
                            }
  
                            Session session = null;
                            Session[] sessions = new Session[arg.length];
  
                            String host = arg[0];
                            String user = host.substring(0, host.indexOf('@'));
                            host = host.substring(host.indexOf('@')+1);
  
                            sessions[0] = session = jsch.getSession(user, host, 22);
                            session.setUserInfo(new MyUserInfo());
                            session.connect();
                            //textPanel.appendText("The session has been established to "+user+"@"+host+"\n");
  
  
  
  
  
  
  //Newly added code     
      textPanel.appendText("The session has been established to "+user+"@"+host+"\n",textPanel);
  
  
                            for(int i = 1; i &lt; arg.length; i++){
                              host = arg[i];
                              user = host.substring(0, host.indexOf('@'));
                              host = host.substring(host.indexOf('@')+1);
  
                              int assinged_port = session.setPortForwardingL(0, host, 22);
                              textPanel.appendText("portforwarding: "+
                                              "localhost:"+assinged_port+" -&gt; "+host+":"+22+"\n");
                              sessions[i] = session =
                                jsch.getSession(user, "localhost", assinged_port);
  
                              session.setUserInfo(new MyUserInfo());
                              session.setHostKeyAlias(host);
                              session.connect();
                              textPanel.appendText("The session has been established to "+
                                              user+"@"+host+"\n");
                            }
  
  
                              String sudo_pass;
                              {
                              JTextField passwordField=(JTextField)new JPasswordField(8);
                              Object[] ob={passwordField}; 
                              int result=
                              JOptionPane.showConfirmDialog(null, 
                                   ob,
                                   "Enter password for sudo",
                                   JOptionPane.OK_CANCEL_OPTION);
                              if(result!=JOptionPane.OK_OPTION){
                              System.exit(-1);
                              }  
                              sudo_pass=passwordField.getText();
                              }
  
                              Channel channel=session.openChannel("exec");
  
                              // man sudo
                              //   -S  The -S (stdin) option causes sudo to read the password from the
                              //       standard input instead of the terminal device.
                              //   -p  The -p (prompt) option allows you to override the default
                              //       password prompt and use a custom one.
                              ((ChannelExec)channel).setCommand("sudo -S -p '' "+command);
  
                              InputStream in = channel.getInputStream();
                              OutputStream out = channel.getOutputStream();
                              ((ChannelExec) channel).setErrStream(System.err);
  
                              channel.connect();
                              out.write((sudo_pass + "\n").getBytes());
                              out.flush();
  
  
                              byte[] tmp = new byte[1024];
                              while (true) {
                                  while (in.available() &gt; 0) {
                                      int i = in.read(tmp, 0, 1024);
                                      if (i &lt; 0)
                                          break;
                                      textPanel.appendText(new String(tmp,0,i));    
                                  }
                                  if (channel.isClosed()) {
  
                                      textPanel.appendText(new String("exit-status: " + channel.getExitStatus())+ "\n");       
                                      break;
                                  }
                                  try {
                                      Thread.sleep(1000);
                                  } catch (Exception ee) {
                                      System.out.println(ee);
                                  }
                              }
                              channel.disconnect();
                              textPanel.appendText("Disconnect\n\n");
  
  
                           for(int i = sessions.length-1; i &gt;= 0; i--){
                              sessions[i].disconnect();
                            }
                          }
  
  
                          catch(Exception e){
                            System.out.println(e);
                          }
                      return null;
                  }
  
                  public void done(){
                      try {
                          System.out.println(get());
                      } catch (Exception ex) {
                          ex.printStackTrace();
                      }
                  }
          };
           sw.execute();
      }
  
  
        public static class MyUserInfo implements UserInfo, UIKeyboardInteractive{
          public String getPassword(){ return passwd; }
          public boolean promptYesNo(String str){
            Object[] options={ "yes", "no" };
            int foo=JOptionPane.showOptionDialog(null, 
                   str,
                   "Warning", 
                   JOptionPane.DEFAULT_OPTION, 
                   JOptionPane.WARNING_MESSAGE,
                   null, options, options[0]);
             return foo==0;
          }
  
          String passwd;
          JTextField passwordField=(JTextField)new JPasswordField(20);
  
          public String getPassphrase(){ return null; }
          public boolean promptPassphrase(String message){ return true; }
          public boolean promptPassword(String message){
            Object[] ob={passwordField}; 
            int result=
            JOptionPane.showConfirmDialog(null, ob, message,
                          JOptionPane.OK_CANCEL_OPTION);
            if(result==JOptionPane.OK_OPTION){
          passwd=passwordField.getText();
          return true;
            }
            else{ return false; }
          }
          public void showMessage(String message){
            JOptionPane.showMessageDialog(null, message);
          }
          final GridBagConstraints gbc = 
            new GridBagConstraints(0,0,1,1,1,1,
                                   GridBagConstraints.NORTHWEST,
                                   GridBagConstraints.NONE,
                                   new Insets(0,0,0,0),0,0);
          private Container panel;
          public String[] promptKeyboardInteractive(String destination,
                                                    String name,
                                                    String instruction,
                                                    String[] prompt,
                                                    boolean[] echo){
            panel = new JPanel();
            panel.setLayout(new GridBagLayout());
  
            gbc.weightx = 1.0;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.gridx = 0;
            panel.add(new JLabel(instruction), gbc);
            gbc.gridy++;
  
            gbc.gridwidth = GridBagConstraints.RELATIVE;
  
            JTextField[] texts=new JTextField[prompt.length];
            for(int i=0; i&lt;prompt.length; i++){
              gbc.fill = GridBagConstraints.NONE;
              gbc.gridx = 0;
              gbc.weightx = 1;
              panel.add(new JLabel(prompt[i]),gbc);
  
              gbc.gridx = 1;
              gbc.fill = GridBagConstraints.HORIZONTAL;
              gbc.weighty = 1;
              if(echo[i]){
                texts[i]=new JTextField(20);
              }
              else{
                texts[i]=new JPasswordField(20);
              }
              panel.add(texts[i], gbc);
              gbc.gridy++;
            }
  
            if(JOptionPane.showConfirmDialog(null, panel, 
                                             destination+": "+name,
                                             JOptionPane.OK_CANCEL_OPTION,
                                             JOptionPane.QUESTION_MESSAGE)
               ==JOptionPane.OK_OPTION){
              String[] response=new String[prompt.length];
              for(int i=0; i&lt;prompt.length; i++){
                response[i]=texts[i].getText();
              }
          return response;
            }
            else{
              return null;  // cancel
            }
          }
        }
      }
  </code></pre>
  
  <p>so whenever I am clicking on any button the output gets redirected to only one textarea whereas other seems to be no usable. i.e to the last created tab.
  I want that when I am clicking on button 1 then it should write to tab 1 and when I am clicking on button 2 then it should write to tab 2 and so on.</p>
  
  <p>Examples appreciated as I am new to java</p>