JAVA调用外部进程最佳实践版组件
package com.allywll.core.exec.base;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeoutException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import com.allywll.core.util.PeriodicalTask;
import com.gzit.core.util.ArrayUtil;
/**
* 对一个外部进程执行过程的抽象
*
* @author gzit team
*
*/
public class ProcessorExecutor implements CmdExecutor {
private static Logger logger = Logger.getLogger("PROCESSOR");
// 进程的执行路径
protected String workingDirectory;
// 进程输出的字符编码
// 默认使用平台的字符编码
private String outputEncoding = Charset.defaultCharset().name();
// 进程的执行命令
protected String cmd;
// 进程的执行参数
protected String[] args;
// 进程执行的超时时间 :单位为毫秒,-1不考虑超时机制,有超时的话将外部进程destroy掉
protected long timeout = -1;
protected long beginTime;// 进程执行的开始时间
protected long endTime;// 进程执行的结束时间
protected Process process; // 当前执行的进程
protected boolean blocking;// 当前执行的进程是否正处在阻塞之中
protected boolean flagTimeout;// 是否发生超时异常
/**
*
* 进程执行过程的监控(超时以及其它的状态检测)
*
*/
private static class ExecutorMonitor extends PeriodicalTask {
private Logger elogger = Logger.getLogger("PROCESSOR");
private List<ProcessorExecutor> executors = new LinkedList<ProcessorExecutor>();
public ExecutorMonitor(int period) {
super(period);
}
public void reg(ProcessorExecutor exec) {
this.executors.add(exec);
}
public synchronized void deReg(ProcessorExecutor exec) {
if (exec != null) {
this.executors.remove(exec);
}
}
@Override
protected void doWork() throws Exception
相关文档:
在Devoxx 2009(一年一度的Java社区大会,今年在11月16-20日举行)上,Sun宣布将在JDK 7中增加闭包功能。这个功能的添加将从FCM v0.5(First-Class Methods,第一类方法)的语法和语意开始着手。FCM与JCA原本一同被提交,然而Sun宣布JCA将不在JDK 7中考虑。
同时,Sun表示Java 7的发布时间将被推迟至2010年底。 ......
Blog from http://forum.xda-developers.com/showthread.php?t=552846
I've just pushed new Hero Java app into my rogers build and it works fine.
What you basically need is:
Jbed.apk (install with adb install)
libjbedvm.so (adb push /system/lib) - remember to remount as RW.
I strongly suggest to ......
很多人都知道在swing中加入jPopupMenu组件后可以在鼠标的驱动下探出一个菜单,但是,如果用一般做法,在界面上单击左键也会弹出菜单,那么有没有办法在只有单击右键才弹出菜单呢?其实只是用到了一个小技巧。 你的弹出鼠标菜单鼠标驱动选择 MouseReleased 然后再在监听事件的方法中加入下面的代码就可以了: if(evt.isPop ......
1. 声明(Declarations)
5.1 每行声明变量的数量(Number Per Line)
推荐一行一个声明,因为这样以利于写注释。亦即,
int level; // indentation level
int size; // size of table
要优于,
int level, size;
不要将不同类型变量的声明放在同一行,例如:
int foo, foo ......
1. 编程惯例(Programming Practices)
9.1 提供对实例以及类变量的访问控制(Providing Access to Instance and Class Variables)
若没有足够理由,不要把实例或类变量声明为公有。通常,实例变量无需显式的设置(set)和获取(gotten),通常这作为方法调用的边缘效应 (side effect ......