java 操作系统cmd示例

package com.shanglan.erp.ffmpeg.service;



import com.shanglan.erp.ffmpeg.config.FFmpegConfig;
import com.shanglan.erp.ffmpeg.entity.TaskEntity;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class TaskHandlerImpl implements TaskHandler {
    private Runtime runtime = null;

    private OutHandlerMethod ohm = null;

    public TaskHandlerImpl(OutHandlerMethod ohm) {
        this.ohm = ohm;
    }

    public void setOhm(OutHandlerMethod ohm) {
        this.ohm = ohm;
    }

    @Override
    public TaskEntity process(String id, String command) {
        Process process = null;
        OutHandler outHandler = null;
        TaskEntity tasker = null;

        String[] commandSplit = command.split(" ");
        List<String> lcommand = new ArrayList<String>();
        for (int i = 0; i < commandSplit.length; i++) {
            lcommand.add(commandSplit[i]);
        }

        ProcessBuilder processBuilder = null;
        try {
            if(processBuilder==null){
                processBuilder = new ProcessBuilder();
            }
            processBuilder.redirectErrorStream(true);
            if(FFmpegConfig.isDebug()){
                System.out.println("执行命令:"+command);
            }
            processBuilder.command(lcommand);
            process = processBuilder.start();   // 执行本地命令获取任务主进程

            outHandler = new OutHandler(process.getErrorStream(), id+"_err", this.ohm);
            outHandler.start();

            OutHandler inHandler = new OutHandler(process.getInputStream(), id+"_in", this.ohm);
            inHandler.start();

            tasker = new TaskEntity(id, process, outHandler);
        } catch (IOException e) {
            if(FFmpegConfig.isDebug())
                System.err.println("执行命令失败!正在停止进程和输出线程...");
            stop(outHandler);
            stop(process);
            // 出现异常说明开启失败,返回null
            return null;
        }
        return tasker;
    }

    @Override
    public boolean stop(Process process) {
        if (process != null) {
            process.destroy();
            return true;
        }
        return false;
    }

    @SuppressWarnings("deprecation")
    @Override
    public boolean stop(Thread outHandler) {
        if (outHandler != null && outHandler.isAlive()) {
            outHandler.stop();
            outHandler.destroy();
            return true;
        }
        return false;
    }

    @Override
    public boolean stop(Process process, Thread thread) {
        boolean ret;
        ret=stop(thread);
        ret=stop(process);
        return ret;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值