⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultcommandinvoker.java

📁 纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统
💻 JAVA
字号:
/*Copyright, Sam Reid, 2003.*/
package org.jnode.shell;

import org.jnode.shell.help.Help;
import org.jnode.shell.help.SyntaxError;

import java.io.PrintStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * User: Sam Reid
 * Date: Dec 20, 2003
 * Time: 1:20:33 AM
 * Copyright (c) Dec 20, 2003 by Sam Reid
 */
public class DefaultCommandInvoker implements CommandInvoker {
    PrintStream err;
    CommandShell commandShell;
    private static final Class[] MAIN_ARG_TYPES = new Class[]{String[].class};

    public DefaultCommandInvoker(CommandShell commandShell) {
        this.commandShell = commandShell;
        this.err=commandShell.getErrorStream();
    }

    public void invoke(String cmdLineStr) {
        final CommandLine cmdLine = new CommandLine(cmdLineStr);
        if (!cmdLine.hasNext())
            return;
        String cmdName = cmdLine.next();

        commandShell.addCommandToHistory(cmdLineStr);
//        System.err.println("Got command: "+cmdLineStr+", name="+cmdName);
        try {
            Class cmdClass = commandShell.getCommandClass(cmdName);
//            System.err.println("CmdClass="+cmdClass);
            final Method main = cmdClass.getMethod("main", MAIN_ARG_TYPES);
//            System.err.println("main="+main);
            try {
//                System.err.println("Invoking...");
                main.invoke(null, new Object[]{cmdLine.getRemainder().toStringArray()});
//                System.err.println("Finished invoke.");
            } catch (InvocationTargetException ex) {
                Throwable tex = ex.getTargetException();
                if (tex instanceof SyntaxError) {
                    Help.getInfo(cmdClass).usage();
                    err.println(tex.getMessage());
                } else {
                    err.println("Exception in command");
                    tex.printStackTrace(err);
                }
            } catch (Exception ex) {
                err.println("Exception in command");
                ex.printStackTrace(err);
            } catch (Error ex) {
                err.println("Fatal error in command");
                ex.printStackTrace(err);
            }
        } catch (NoSuchMethodException ex) {
            err.println("Alias class has no main method " + cmdName);
        } catch (ClassNotFoundException ex) {
            err.println("Unknown alias class " + ex.getMessage());
        } catch (ClassCastException ex) {
            err.println("Invalid command " + cmdName);
        } catch (Exception ex) {
            err.println("I FOUND AN ERROR: " + ex);
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -