logo头像

博学广问,自律静思

【JAVA_RMI】(6)制作命令行导航菜单

由于在eclipse运行配置里添加运行参数并不方便,建议将调试好的java工程导出为可以运行的jar包,然后在命令行打开jar所在文件夹,使用”java -jar <包名> <main函数参数1 参数2 ……>“,下图的help命令就是main函数执行时的参数数组arg[]的第一个元素arg[0]。参数以空格为分隔符,后面分别是arg[1]、arg[2]。 知道这点,制作java命令行的导航菜单就很简单。为了方便操作,极客人为这次试验还制作了GUI,支持GUI、命令行双界面模式运行应用。命令行的好处可能只有程序员才知道,它最大的好处、个人认为是可以批处理,这是习惯GUI的用户无法理解的。

效果预览:

java命令行导航菜单 java命令行导航菜单

MeetingClient.java

下述代码通过匹配用户输入的main函数参数,分别执行在上一篇文章中定义的方法。其中输入GUI和不输入参数将启动GUI模式。 java命令行导航菜单2 java命令行导航菜单2

package cn.wangbaiyuan;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.sql.SQLException;

/**
* RMI会议客户端
* @author 王柏元
{@linkplain http://wangbaiyuan.cn}
*/
public class MeetingClient {
public static void main(String args[]) throws IOException{
int cmdLength=args.length;
MeetingInterface meeting;
if(cmdLength==0){
LoginGUI.show(null);
}else {
String note=”RMI会议客户端©王柏元—命令行版:\n”
+ “1.帮助信息:\n\thelp\n”
+ “2.用户注册:\n\tregister [用户名] [密码]\n”
+ “ 3.添加会议:\n\tadd [你的用户名] [你的密码] [邀请谁?他的用户名] [开始时间] [结束时间] [会议标题]\n”
+ “\t 时间格式:2015-06-05 22:29:19\n”
+ “4. 查询会议:\n\tquery [你的用户名] [你的密码][开始时间] [结束时间]\n”
+ “5.删除会议:\n\tdelete [你的用户名] [你的密码] [会议ID]\n”
+ “6.清除会议:\n\tclear [username] [password]\n”
+ “7.关于本程序:\n\tabout\n”
+ “8.退出:\n quit\n\t”
+ “9.GUI模式:\n GUI\n\t”
+ “请输入命令:”;
String about=”RMI会议客户端©王柏元—命令行行版:\n”
+ “作者:王柏元\n”
+ “个人网站:http://wangbaiyuan.cn\\n"
+ “运行模式:GUI和命令行双环境\n”
+ “程序介绍:使用Java RMI创建一个分布式议程共享服务。”
+ “不同的用户可以使用这个共享议程服务执行查询、添加和删除”
+ “会议的操作。服务器支持会议的登记和清除等功能;”;
try {
meeting=(MeetingInterface) Naming.lookup(LoginGUI.getRmiURL());
switch(args[0]){

            case "register":
                if(cmdLength==3){
                    meeting.addMeetingUsers(args\[1\], args\[2\]);
                }else{
                    System.out.println("命令参数错误\\n"
                            \+ "用户注册:\\n\\tregister \[用户名\] \[密码\]\\n");
                }
                break;
            case "add":
                if(cmdLength==9){
                    meeting.addMeetings(args\[1\], args\[2\],args\[3\] ,args\[4\],args\[5\]+" "
                +args\[6\], args\[7\]+" "+args\[8\]);
                }else{
                    System.out.println("命令参数错误\\n"
                            \+ "添加会议:\\n\\tadd \[你的用户名\] \[你的密码\] \[邀请谁?他的用户名\]\[会议标题\] \[开始时间\] \[结束时间\] \\n");
                }
                break;
            case "query":

                if(cmdLength==7){
                    if(meeting.LoginMeetings(args\[1\], args\[2\]))
                    meeting.searchrMeetings(args\[3\]+" "+ args\[4\],args\[5\]+" "+ args\[6\]);
                }else{
                    System.out.println("命令参数错误\\n"
                            \+ "查询会议:\\n\\tquery \[用户名\] \[密码\]\[开始时间\] \[结束时间\]\\n");
                }
                break;
            case "delete":
                if(cmdLength==4){
                    if(meeting.LoginMeetings(args\[1\], args\[2\]))
                    meeting.deleteMeetings(args\[1\], args\[3\]);
                }else{
                    System.out.println("命令参数错误\\n"
                            \+ "删除会议:\\n\\tdelete \[你的用户名\] \[你的密码\] \[会议ID\]\\n");
                }
                break;
            case "clear":
                if(cmdLength==3){
                    if(meeting.LoginMeetings(args\[1\], args\[2\]))
                        meeting.clearMeetings(args\[1\]);
                }else{
                    System.out.println("命令参数错误\\n"
                            \+ "清除会议:\\n\\tclear \[username\] \[password\]\\n");
                }
                break;
            case "about":
                System.out.println(about);break;
            case "GUI":
                LoginGUI.show(null);break;
            case "help":
            System.out.println(note);break;
            case "quit":
                LoginGUI.show(null);break;

                }
        } catch (NotBoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (BYException e) {
            // TODO Auto-generated catch block
            System.out.println(e.getMessage());
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    }

} 

系列文章链接:

SSD8_Ex3【JAVA_RMI服务】(1)概述RMI和网络API

SSD8_Ex3【JAVA_RMI】(2)远程接口声明

SSD8_Ex3【JAVA_RMI】(3)开启RMI服务

SSD8_Ex3【JAVA_RMI】(4)会议数据库建表

SSD8_Ex3【JAVA_RMI】(5)数据库连接和会议方法定义

SSD8_Ex3【JAVA_RMI】(6)制作命令行导航菜单

@极客人
极客人 commented at 2015-06-29

学姐啊?XJ原来是这个意思!

@xj
xj commented at 2015-06-29

哈哈,看到你的作业了。。不错不错 :wink:

@极客人
极客人 commented at 2015-06-14

说了是GUI和命令行双模式呢

@王柏元超级无敌粉丝
王柏元超级无敌粉丝 commented at 2015-06-14

GUI不是图形效果吗?你这个不还是dos命令行吧!

@王柏元超级无敌粉丝
王柏元超级无敌粉丝 commented at 2015-06-13

还没有学到这里,以后学到这里,希望博主多多指导。