佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1236|回复: 1

Java 高手 帮忙 (Swingworker)

[复制链接]
发表于 24-9-2013 09:29 AM | 显示全部楼层 |阅读模式
最近想写一个 PING test 的简单java program..

class pingTest {

    public static void main(String[] args) {
    String ip = "127.0.0.1";
    String pingResult = "";

    String pingCmd = "ping " + ip;
       try {
                Runtime r = Runtime.getRuntime();
                Process p = r.exec(pingCmd);

                BufferedReader in = new BufferedReader(new
                InputStreamReader(p.getInputStream()));
                String inputLine;
                     while ((inputLine = in.readLine()) != null) {
                     jTextArea1.append(inputLine);
                     pingResult += inputLine;
                }
                     in.close();

                } catch (IOException e) {
                     System.out.println(e);
           }

       }
}


我想把result display 在 jTextArea1.. 但是发现到result 是一次性post完出来,而我是想要它好像在CMD 一样,一行一行的show 出来...

上网查了是需要用swingworker之类的function,可是不是很了解,希望有哪位高手能指教指教一下,万分感激!!!






回复

使用道具 举报


ADVERTISEMENT

发表于 27-9-2013 05:31 AM | 显示全部楼层
java 1.6的 javadoc 写JTextArea.append(String) 是 thread-safe, java 1.7就没写是 thread-safe. 如果你的问题只是jTextArea1.append(inputLine);
用SwingUtilities.invokeLater(Runnable) 就能解决了.

给你参考 (因为要在Event-Dispatching Thread update JComponent, 所以很长):

public class PingTest extends javax.swing.JPanel {

    public PingTest() {
        initComponents();
    }
     
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        setLayout(new java.awt.BorderLayout());

        jScrollPane1.setViewportView(jTextArea1);

        add(jScrollPane1, java.awt.BorderLayout.CENTER);
    }            
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;           

    private static PingTest createAndShowGUI(PingTest panel) throws IOException {
        //Create and set up the window.
        JFrame frame = new JFrame("ing Test";
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(panel);
        //Display the window.
        frame.pack();
        frame.setVisible(true);
        return panel;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    PingTest panel = new PingTest();
                    createAndShowGUI(panel);

                    panel.startPing();
                } catch (IOException ex) {
                    Exceptions.printStackTrace(ex);
                }
            }
        });
    }

    private void startPing() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                String ip = "127.0.0.1";
                String pingResult = "";

                String pingCmd = "ping " + ip;
                try {
                    Runtime r = Runtime.getRuntime();
                    Process p = r.exec(pingCmd);

                    BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
                    String inputLine;
                    while ((inputLine = in.readLine()) != null) {
                        final String line = inputLine;
                        SwingUtilities.invokeLater(new Runnable() {
                            @Override
                            public void run() {
                                jTextArea1.append(line + "\n";
                            }
                        });

                        pingResult += inputLine;
                    }
                    in.close();
                } catch (IOException e) {
                    System.out.println(e);
                }
            }
        }).start();
    }
}

本帖最后由 huionn 于 27-9-2013 05:33 AM 编辑

评分

参与人数 1人气 +3 收起 理由
天酷星 + 3 谢谢分享,感激不尽

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT


本周最热论坛帖子本周最热论坛帖子

ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 12-11-2025 02:30 PM , Processed in 0.134757 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表