需要有关流程的帮助

2023-12-07

当我开始像这样的过程时process= Runtime.getRuntime().exec("gnome-terminal");,它启动 shell 执行,我想停止 shell 执行并想从进程重定向 I/O,有人能告诉我如何做到这一点吗?

我的代码是:

public void start_process()
{
     try
     {
         process= Runtime.getRuntime().exec("bash");
         pw= new PrintWriter(process.getOutputStream(),true);
         br=new BufferedReader(new InputStreamReader(process.getInputStream()));
         err=new BufferedReader(new InputStreamReader(process.getErrorStream()));

     }
     catch (Exception ioe)
     {
         System.out.println("IO Exception-> " + ioe);
     }


}

public void execution_command()
{

    if(check==2)
    {
        try
        {
            boolean flag=thread.isAlive();
            if(flag==true)
                thread.stop();

            Thread.sleep(30);
            thread = new MyReader(br,tbOutput,err,check);
            thread.start();

        }catch(Exception ex){
            JOptionPane.showMessageDialog(null, ex.getMessage()+"1");
        }
    }
    else
    {
        try
        {
            Thread.sleep(30);
            thread = new MyReader(br,tbOutput,err,check);
            thread.start();
            check=2;

        }catch(Exception ex){
            JOptionPane.showMessageDialog(null, ex.getMessage()+"1");
        }

    }
}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    command=tfCmd.getText().toString().trim();

    pw.println(command);

    execution_command();

}    

当我在文本字段中输入一些命令并按执行按钮时,输出文本区域上没有显示任何内容,我如何停止 shell 执行并重定向输入和输出?


来自Javadoc:

The ProcessBuilder.start() and Runtime.exec()方法创建一个本机进程并返回一个子类的实例Process可用于控制过程并获取有关过程的信息。班上Process提供从进程执行输入、向进程执行输出、等待进程完成、检查进程的退出状态以及销毁(终止)进程的方法。

创建进程的方法可能不适用于某些本机平台上的特殊进程,例如本机窗口进程、守护进程、Microsoft Windows 上的 Win16/DOS 进程或 shell 脚本。创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin、stdout、stderr)操作都将通过三个流重定向到父进程(getOutputStream(), getInputStream(), getErrorStream())。父进程使用这些流向子进程提供输入并从子进程获取输出。由于某些原生平台只为标准输入输出流提供有限的缓冲区大小,因此未能及时写入子进程的输入流或读取子进程的输出流可能会导致子进程阻塞,甚至死锁。

换句话说,在将缓冲流读取器连接到之后process.getInputStream()正如您所做的那样,您应该读取其所有输出以使其正常运行。

Update: 这是一个简单的例子怎么做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要有关流程的帮助 的相关文章

随机推荐

  • const 引用的默认参数中使用的统一初始值设定项

    这是合法的 c 0x 语法吗 class A public void some function const std set
  • Java 中使用同步块的并发未给出预期结果

    下面是一个简单的 java 程序 它有一个名为 cnt 的计数器 该计数器会递增 然后添加到名为 monitor 的列表中 cnt 由多个线程递增 值由多个线程添加到 monitor 在方法 go 的末尾 cnt 和 monitor siz
  • 如何打开包含图像数组的 fancybox

    我在 JS 中有一组图像 ulrs photos img1 jpg img2 jpg 我正在使用 Fancybox 2 如何打开包含数组图像的 fancybox start slides fancybox openEffect elasti
  • 你能用 JavaScript 编写嵌套函数吗?

    我想知道 JavaScript 是否支持在另一个函数中编写函数或嵌套函数 我在博客中读到 这真的可能吗 事实上 我已经使用过这些 但不确定这个概念 我对此真的不清楚 请帮忙 这真的可能吗 Yes function a x lt functi
  • 如何获取javax.comm API?

    我最近下载了一个项目SMS正在发送 但是当我尝试编译代码时 它给出了在线错误import javax comm 谁能告诉我在哪里可以找到javax comm以及放置在哪里 这样就不会出现编译错误 Oracle Java 通信 API 参考
  • 从一个枚举状态移动到下一个状态并循环

    我只有具有 3 种模式 ledOn ledBlink ledOFF 的枚举器 并且有一个可变模式来跟踪特定对象的模式 例如 我有一个 LED 以 ledOn 模式启动 我想在 5 秒后移动到下一个元素 即 ledBlink 然后移动到 le
  • Django self.cleaned_data Keyerror

    我正在编写一个 Django 网站 并且正在编写自己的表单验证 class CreateJobOpportunityForm forms Form subject forms CharField max length 30 start da
  • UIButton 中图像下的标签

    我正在尝试创建一个按钮 该按钮在图标下方有一些文本 有点像应用程序按钮 但它似乎很难实现 任何想法如何让文本显示below图像与UIButton 或者您可以只使用此类别 ObjC interface UIButton VerticalLay
  • 如何解决“react-native start”错误

    我刚刚安装了 node js 和 cli 安装了node js 安装了react native cli npm g react native cli 并创建了一个 新项目 react native init new project 在 ne
  • 使用 jQuery 将三个重复的 div 组合并为一个

    我这里还有另一个问题 我有几个重复的 div 组 一组有3个不同班级的分区 我需要做的是将其包装到一个 容器 中 当我使用wrapAll时 它会将所有内容包装到一个div中 这是我的 html div class bb box tl div
  • 使用jquery ajax将javascript对象转为php

    我有一个数组或一个 javascript 对象 我创建如下 arr arr length obj其中 obj 是一个经典的 JSON 字符串 例如 id 1 So arr似乎是一个 JavaScript 对象数组 我可以这样访问它 arr
  • 无法使用自定义适配器理解 NullPointerException

    我正在尝试创建一个列表视图 它作为可以显示 html 内容的 TextView WebView 和其他基本 TextView 我尝试扩展 SimpleAdapter 但我遇到了这个问题 如果有人能指出我正在做的错误 我会很高兴 在onCre
  • 从BackgroundWorker内的剪贴板获取数据

    我有一个后台工作者 在 DoWork 方法中我有以下内容 var clipboardData Application Current Dispatcher Invoke new Action gt Clipboard GetData Dat
  • 如何将操作栏选项卡向右对齐?

    我以编程方式添加了操作栏选项卡 我不知道如何将操作栏选项卡向右对齐 ActionBar bar getActionBar bar setNavigationMode ActionBar NAVIGATION MODE TABS instan
  • Google Apps 脚本中的 Cookie 处理 - 如何在标头中发送 Cookie?

    我正在尝试编写一个简单的脚本 从网页中获取文本并处理该字符串 但是 该网站要求我登录 我成功登录该网站 这是我登录的方式 var payload name1 val1 name2 val2 var opt payload payload m
  • 如何格式化 Winform 中 LostFocus 事件的所有文本框值

    我需要在失去焦点事件时向任何相关文本框值中每个数值的千位添加逗号 我创建了以下函数 public static void FormatNumerical this Control control if control is TextBox
  • 递归函数的复杂性 - 时间和空间

    我有兴趣知道如何计算递归函数的时间和空间复杂度 如排列 斐波那契 描述here 一般来说 我们可以在很多地方进行递归 而不仅仅是排列或递归 所以我正在寻找通常遵循的方法来计算时间和空间复杂度 谢谢 看一眼http www cs duke e
  • 带有 if 语句的函数中的全局变量

    好吧 我目前正在做一个用 python 制作二十一点游戏的项目 但遇到了一些麻烦 我的问题之一是我不知道何时将变量定义为全局变量 特别是在带有 if 语句的函数中 如果我在 if 语句之外有一个全局变量 我是否必须声明该变量在 if 语句内
  • 使用“import __main__”是个好习惯吗?

    我正在开发一个相对较大的 Python 应用程序 并且我希望将一些资源保留为可在多个不同模块中访问的全局变量 这些值包括版本号 版本日期 全局配置和一些资源的静态路径 我还包括了一个DEBUG由命令行选项设置的标志 以便我可以在调试模式下运
  • 需要有关流程的帮助

    当我开始像这样的过程时process Runtime getRuntime exec gnome terminal 它启动 shell 执行 我想停止 shell 执行并想从进程重定向 I O 有人能告诉我如何做到这一点吗 我的代码是 pu