如何从java applet启动ping等外部进程并捕获输出?

时间:2013-08-08 19:58:04

标签: java process applet external-process

在标准的java程序中,我可以执行以下操作:

import java.io.*;
public class PingApp
{
    public static void main(String args[])
    {
        System.out.println("about to try to launch ping...");
        try
        {
            Process p = Runtime.getRuntime().exec("ping -o google.com"); 
            p.waitFor(); 
            BufferedReader reader=new BufferedReader(
                new InputStreamReader(p.getInputStream())
            );
            String line=reader.readLine(); 
            while(line!=null) 
            { 
                System.out.println(line);
                line=reader.readLine(); 
            }
        }
        catch(IOException e1) {
            System.err.println(e1.getMessage());
        } 
        catch(InterruptedException e2) {
            System.err.println(e2.getMessage());
        } 
        System.out.println("finished.");
    }
}

我想在java applet中做同样的事情,除了打印我捕获到终端的输出,我想在浏览器的applet窗口中显示它。

就是这样。

当我尝试将此代码放入applet时,我遇到的错误是:

Exception in thread "AWT-EventQueue-3" java.security.AccessControlException: access denied ("java.io.FilePermission" "<<ALL FILES>>" "execute")

有什么方法可以解决这个AccessControlException吗?

感谢。

2 个答案:

答案 0 :(得分:2)

这是Java的一项安全功能,可以阻止您恶意使用用户的终端或等效内容,以及读取或写入驱动器。

解决这个问题的唯一方法是签名小程序。

答案 1 :(得分:1)

您的小程序应首先签名。看看这个:

Java applet: run native code from browser?

然后使用Runtime.exec启动它。