我为"商业用户"创建了许多特别的Java程序。使用。这些程序通常将输入作为命令行参数。
为了方便他们运行这些程序,我为每个程序创建一个批处理文件,它有完整的java命令来运行它和输入参数。
我要求他们更新这些输入参数,保存文件,双击文件以运行不同的输入集程序。然而,他们发现这种方法很难并且不太舒服。
我不想为n个输入创建n个批处理文件,而且我们也不知道将来可能出现的所有输入。
我想知道这个问题是否有任何标准解决方案?可能是已有的GUI还是可以缓解生活的任何东西?
感谢。
答案 0 :(得分:0)
如果您可以并且想要在每个程序中添加这样的方法'主要课程:
public static String[] usage(){
return new String[]{
"name", "\\w+",
"number", "\\d+" };
}
然后这个Wrapper类可以提供一个通用的提示来调用带有(或多或少)正确参数的程序:
public class Wrapper {
public static void main( String[] args ) throws Exception {
System.out.println( args.getClass() );
Class<?> prog = Class.forName( args[0] );
Method mu = prog.getMethod( "usage" );
String[] nps = (String[])mu.invoke( null );
Scanner scan = new Scanner( System.in );
List<String> pars = new ArrayList<>();
for( int i = 0; i < nps.length; i += 2 ){
boolean ok = false;
while( ! ok ){
System.out.print( nps[i] + ": " );
String line = scan.nextLine().trim();
if( line.matches( nps[i+1] ) ){
ok = true;
pars.add( line );
} else {
System.err.println( "input error - please retry" );
}
}
}
String[] params = pars.toArray( new String[pars.size()] );
Method mm = prog.getMethod( "main", args.getClass() );
mm.invoke( null, (Object)(params) );
}
}
必须使用包含(迄今为止)主要main方法的类的名称调用Wrapper。除了增加使用外,现有代码不必更改。
注意:需要添加一些异常处理,例如:当Class.forName抛出异常ClassNotFoundException时。