【问题标题】:BufferedReader output in JTextAreaJTextArea 中的 BufferedReader 输出
【发布时间】:2013-03-06 22:37:16
【问题描述】:

我正在尝试从BufferedReader 在另一个类中调用一行我希望能够在我的主类中的JTextArea 中输出结果

这是我的主要课程:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import java.io.*;
import java.lang.Process.*;

public class FTP {
    public static void main (String []args){
            Runnable runner = new Runnable(){
                public void run()
                {

                    LookAndFeel nimbusLook = new LookAndFeel();
                    nimbusLook.NimbusLookAndFeel();

                    JFrame frame = new JFrame("BNA FTP Diagnose");
                    frame.setVisible(true);
                    frame.setResizable(false);
                    frame.setSize(540, 420);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLocation(150, 150);


                    JMenuBar menuBar = new JMenuBar();
                    frame.setJMenuBar(menuBar);

                    JMenu fileMenu = new JMenu("File");
                    menuBar.add(fileMenu);
                    final JMenuItem exitMenuItem = new JMenuItem("Exit");
                    fileMenu.add(exitMenuItem);


                    JMenu helpMenu = new JMenu("Help");
                    menuBar.add(new JPanel());
                    menuBar.add(helpMenu);
                    final JMenuItem aboutMenuItem = new JMenuItem("About");
                    helpMenu.add(aboutMenuItem);



                    JPanel titlePanel = new JPanel(new BorderLayout());
                    frame.add(titlePanel, BorderLayout.NORTH);

                    JLabel titleLabel = new JLabel("FTP Diagnose", JLabel.CENTER);
                    titleLabel.setFont(new Font(null, Font.BOLD, 14));
                    titleLabel.setForeground(Color.BLUE);
                    titlePanel.add(titleLabel);

                    JPanel gridPanel = new JPanel(new GridLayout(1, 1));
                    frame.add(gridPanel);

                    JPanel vendorPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
                    gridPanel.add(vendorPanel);

                    final String vendor [] = {"LLesiant" ,"WK-CCH", "Proquest", "Notes", "Research Institute of America", "Thomson", 
                            "BNAI PDF Processing", " TM Portfolios to Indexing", "Postscript to PRODLOGIN1", "www.firstdoor.net", "psp.bna.com", "WEST", "LexisNexis", "McArdle Printing Company", 
                            "Breaking News Email", "Ex Libris", "Pandora", "Bloomberg Law", "Acquire Media Site 1", "Acquire Media Site 2", "Quicksite", "QA Quicksite"};
                    final JComboBox vendorList = new JComboBox(vendor);
                    vendorPanel.add(vendorList);

                    JPanel diagnoseButtonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
                    gridPanel.add(diagnoseButtonPanel);
                    final JButton diagnoseButton = new JButton("Diagnose");
                    diagnoseButtonPanel.add(diagnoseButton);


                    JPanel centerPanel = new JPanel(new BorderLayout());
                    frame.add(centerPanel, BorderLayout.SOUTH);
                    JPanel commandPanel = new JPanel(new GridLayout(1, 0));
                    centerPanel.add(commandPanel);


                    final JTextArea commandResultArea = new JTextArea(7, 0);
                    JScrollPane scroll = new JScrollPane(commandResultArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
                    commandPanel.add(scroll);
                    commandResultArea.setEditable(false);




                    ActionListener buttonListener = new ActionListener(){

                        public void actionPerformed(ActionEvent ae)

                        {
                            int selectedIndex = vendorList.getSelectedIndex();

                            String llesiant = "ftp.llesiant.com";
                            String wkCCH = "FTP1.cch.com";
                            String proquest = "ftp.proquest.com";
                            String notes = "notes5.bna.com";


                            //String lineThree = null;

                            CommandClass readCommand = new CommandClass();

                            if (selectedIndex == 0)
                            {
                                readCommand.getCommand(llesiant);
                            }
                            else if (selectedIndex == 1)
                            {
                                readCommand.getCommand(wkCCH);
                            }
                            else if (selectedIndex == 2)
                            {
                                readCommand.getCommand(proquest);
                            }
                            else if (selectedIndex == 3)
                            {
                                readCommand.getCommand(notes);
                            }

                        }

                    };
                    diagnoseButton.addActionListener(buttonListener);

                    ActionListener exitListener = new ActionListener (){

                        public void actionPerformed(ActionEvent el)
                        {

                            if (el.getSource()== exitMenuItem)
                            {
                                JOptionPane.showMessageDialog(null, "FTP Program will exit now!");
                                System.exit(0);
                            }

                        }

                    };

                    exitMenuItem.addActionListener(exitListener);

                    ActionListener aboutListener = new ActionListener()
                    {
                        public void actionPerformed(ActionEvent al)
                        {

                            if (al.getSource()== aboutMenuItem)

                            {
                            JOptionPane.showMessageDialog(null, "This Software was made for Editors to. \nDiagnose BNA Bloomberg client FTP site.");

                            }
                        }

                    };
                    aboutMenuItem.addActionListener(aboutListener);             
                    }

            };
            EventQueue.invokeLater(runner);

        }

}

这是我的 CommandClass:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.swing.JOptionPane;


public class CommandClass {




    public String line;



    public void getCommand(String ftpSite)

    {


        String command = "ping ";


        try
        {
        Process p = Runtime.getRuntime().exec(command +ftpSite);

        BufferedReader readOutput = new BufferedReader(new InputStreamReader (p.getInputStream()));


        JOptionPane.showMessageDialog(null, "FTP is connected");

        while ((line = readOutput.readLine()) != null)
        {

                System.out.println(line);   

        }
        readOutput.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();

        }

    }





}

这是我的 Look and Feel 课程:

import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;

public class LookAndFeel {


    public void NimbusLookAndFeel()
    {

        try {
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (Exception e) {
            // If Nimbus is not available, you can set the GUI to another look and feel.
        }


    }




}

我正在尝试做的事情:输出在控制台中打印得很好,但我希望能够在邮件类的 JTextArea 中打印出来,我也尝试返回字符串行的值,但它似乎不断回来与空。如果我想做的事情是不可能的。有没有办法让我的 JTextArea.setText (commandCLass)

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java swing jtextarea bufferedreader


【解决方案1】:

FTP 类:

我这样做是为了当你 ping 服务器时,它会返回一个字符串。 您可以修改它以主动编辑 JTextField 中的文本,但这工作正常。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import java.io.*;
import java.lang.Process.*;

public class FTP {



  public static void main (String []args)
  {
    Runnable runner = new Runnable(){



      public void run()
      {

        LookAndFeel nimbusLook = new LookAndFeel();
        nimbusLook.NimbusLookAndFeel();

        JFrame frame = new JFrame("BNA FTP Diagnose");
        frame.setVisible(true);
        frame.setResizable(false);
        frame.setSize(540, 420);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(150, 150);


        JMenuBar menuBar = new JMenuBar();
        frame.setJMenuBar(menuBar);

        JMenu fileMenu = new JMenu("File");
        menuBar.add(fileMenu);
        final JMenuItem exitMenuItem = new JMenuItem("Exit");
        fileMenu.add(exitMenuItem);


        JMenu helpMenu = new JMenu("Help");
        menuBar.add(new JPanel());
        menuBar.add(helpMenu);
        final JMenuItem aboutMenuItem = new JMenuItem("About");
        helpMenu.add(aboutMenuItem);



        JPanel titlePanel = new JPanel(new BorderLayout());
        frame.add(titlePanel, BorderLayout.NORTH);

        JLabel titleLabel = new JLabel("FTP Diagnose", JLabel.CENTER);
        titleLabel.setFont(new Font(null, Font.BOLD, 14));
        titleLabel.setForeground(Color.BLUE);
        titlePanel.add(titleLabel);

        JPanel gridPanel = new JPanel(new GridLayout(1, 1));
        frame.add(gridPanel);

        JPanel vendorPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        gridPanel.add(vendorPanel);

        final String vendor [] = {"LLesiant" ,"WK-CCH", "Proquest", "Notes", "Research Institute of America", "Thomson", 
          "BNAI PDF Processing", " TM Portfolios to Indexing", "Postscript to PRODLOGIN1", "www.firstdoor.net", "psp.bna.com", "WEST", "LexisNexis", "McArdle Printing Company", 
          "Breaking News Email", "Ex Libris", "Pandora", "Bloomberg Law", "Acquire Media Site 1", "Acquire Media Site 2", "Quicksite", "QA Quicksite"};
        final JComboBox vendorList = new JComboBox(vendor);
        vendorPanel.add(vendorList);

        JPanel diagnoseButtonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        gridPanel.add(diagnoseButtonPanel);
        final JButton diagnoseButton = new JButton("Diagnose");
        diagnoseButtonPanel.add(diagnoseButton);


        JPanel centerPanel = new JPanel(new BorderLayout());
        frame.add(centerPanel, BorderLayout.SOUTH);
        JPanel commandPanel = new JPanel(new GridLayout(1, 0));
        centerPanel.add(commandPanel);


        final JTextArea commandResultArea = new JTextArea(7, 0);
        JScrollPane scroll = new JScrollPane(commandResultArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        commandPanel.add(scroll);
        commandResultArea.setEditable(false);




        ActionListener buttonListener = new ActionListener(){

          public void actionPerformed(ActionEvent ae)

          {
            int selectedIndex = vendorList.getSelectedIndex();

            String llesiant = "ftp.llesiant.com";
            String wkCCH = "FTP1.cch.com";
            String proquest = "ftp.proquest.com";
            String notes = "notes5.bna.com";


            //String lineThree = null;

            CommandClass readCommand = new CommandClass();

            if (selectedIndex == 0)
            {
              commandResultArea.setText(readCommand.getCommand(llesiant)); //these return strings

            }
            else if (selectedIndex == 1)
            {
              commandResultArea.setText(readCommand.getCommand(wkCCH));
            }
            else if (selectedIndex == 2)
            {
              commandResultArea.setText(readCommand.getCommand(proquest));
            }
            else if (selectedIndex == 3)
            {
              commandResultArea.setText(readCommand.getCommand(notes));
            }

          }

        };
        diagnoseButton.addActionListener(buttonListener);

        ActionListener exitListener = new ActionListener (){

          public void actionPerformed(ActionEvent el)
          {

            if (el.getSource()== exitMenuItem)
            {
              JOptionPane.showMessageDialog(null, "FTP Program will exit now!");
              System.exit(0);
            }

          }

        };

        exitMenuItem.addActionListener(exitListener);

        ActionListener aboutListener = new ActionListener()
        {
          public void actionPerformed(ActionEvent al)
          {

            if (al.getSource()== aboutMenuItem)

            {
              JOptionPane.showMessageDialog(null, "This Software was made for Editors to. \nDiagnose BNA Bloomberg client FTP site.");

            }
          }

        };
        aboutMenuItem.addActionListener(aboutListener);             
      }

    };
    EventQueue.invokeLater(runner);

  }

}

命令类:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.swing.JOptionPane;


public class CommandClass extends FTP {




  public String line, output = "";



  public String getCommand(String ftpSite)

  {


    String command = "ping ";


    try
    {
      Process p = Runtime.getRuntime().exec(command +ftpSite);

      BufferedReader readOutput = new BufferedReader(new InputStreamReader (p.getInputStream()));


      JOptionPane.showMessageDialog(null, "FTP is connected");

      while ((line = readOutput.readLine()) != null)
      {

        System.out.println(line);   
        output += line + "\n";

      }
      readOutput.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();

    }
    return output;
  }





}

【讨论】:

  • 您能否解释一下为什么需要通过扩展来固有 FTP 类,以及为什么必须将该类声明为返回值的字符串。输出字符串的目的是什么,似乎它在顶部设置为空。我真的很感激我正在努力学习这一点。
【解决方案2】:

像这样改进您的 getCommand 方法以返回正确的 String 并在您的主类中使用该返回值以显示在 JTextArea

public String getCommand(String ftpSite){
    String command = "ping ";
    StringBuffer output = new StringBuffer();
    try{
         Process p = Runtime.getRuntime().exec(command +ftpSite);
         //BufferedReader readOutput = new BufferedReader(new InputStreamReader (p.getInputStream()));
        InputStreamReader ir = new InputStreamReader (p.getInputStream());
        int outputChar = 0;
        while((outputChar = ir.read()) != -1){
            output.append((char)outputChar);
        if(!ir.ready()){ // If the next read is not guarenteed, come out of loop.
            break;
        }
            }
          ir.close();
         JOptionPane.showMessageDialog(null, "FTP is connected");
         //while ((line = readOutput.readLine()) != null){
              //System.out.println(line);   
              //output.append(line).append("\n");
         //}
         //readOutput.close();
    }catch (IOException e){
        e.printStackTrace();
    }
    return output.toString();
}

FTP 类中的 if-else 块

                CommandClass readCommand = new CommandClass();

                        if (selectedIndex == 0)
                        {
                            commandResultArea.setText(readCommand.getCommand(llesiant));
                        }
                        else if (selectedIndex == 1)
                        {
                            commandResultArea.setText(readCommand.getCommand(wkCCH));
                        }
                        else if (selectedIndex == 2)
                        {
                            commandResultArea.setText(readCommand.getCommand(proquest));
                        }
                        else if (selectedIndex == 3)
                        {
                           commandResultArea.setText(readCommand.getCommand(notes));
                        }

【讨论】:

  • 您能否解释一下为什么需要通过扩展来固有 FTP 类,以及为什么必须将该类声明为返回值的字符串。输出字符串的目的是什么,似乎它在顶部设置为空。我真的很感激我正在努力学习这个
  • 我没有继承FTP类。我在CommandClass 中修改了getCommand 方法。在您的 FTP 课程中,if-else 阶梯将更改,如我的帖子所示。更新了我的帖子。
  • 我还有一个问题,如果我要将命令从 ping 更改为 ftp 当您在 cmd 或 unix 和站点上输入 ftp 时,它不会打印出任何说明 ftp 已正常连接的消息它说它已连接是因为我的命令没有输出流,如果我想在连接 ftp 时显示一条消息,我该怎么做,或者我如何打印出运行 ftp 命令时通常会打印出来的任何内容cmd 或 unix 谢谢一百万
  • 我只是用 ftp 命令尝试过,但没有得到任何响应 它必须是一个 url 还是类似于“ftp.llesiant.com”之类的东西?我没有得到任何响应当我尝试在代码中列出的 ftp 站点之一时,在 JTextArea 上
  • 使用InputStreamReader 我能够做到这一点。不是BufferedReader。更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多