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

📄 phonesimulator.java

📁 用java程序写的一个模拟打电话的小程序
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                    redialButton.setEnabled(true);//置重播键有效
                }
                else//否则置重播键无效
                {
                    redialButton.setEnabled(false);
                }
                hangupButton.setEnabled(false);// 挂断键无效
                pauseToggle.setSelected(false);//未选暂停键.
                pauseToggle.setEnabled(false);//暂停键无效.
                //saveButton.setEnabled(true);//保存键有效
                storeButton.setEnabled(false);//存储键无效
                Button0.setEnabled(true);//数字键全有效
                Button1.setEnabled(true);
                Button2.setEnabled(true);
                Button3.setEnabled(true);
                Button4.setEnabled(true);
                Button5.setEnabled(true);
                Button6.setEnabled(true);
                Button7.setEnabled(true);
                Button8.setEnabled(true);
                Button9.setEnabled(true);
                ButtonStar.setEnabled(false);// *键无效
                ButtonSharp.setEnabled(true);//#键有效
                break;
            case(autoDialBState):
                dialButton.setEnabled(false);//拨号按钮无效
                //directListenToggle.setSelected(false);//未选免提键
                directListenToggle.setEnabled(false);//免提键无效
                redialButton.setEnabled(false);//置重播键无效                                
                hangupButton.setEnabled(false);// 挂断键无效
                pauseToggle.setSelected(false);//未选暂停键.
                pauseToggle.setEnabled(false);//暂停键无效.
               //saveButton.setEnabled(true);//保存键有效
                storeButton.setEnabled(false);//存储键无效
                Button0.setEnabled(true);//数字键全有效
                Button1.setEnabled(true);
                Button2.setEnabled(true);
                Button3.setEnabled(true);
                Button4.setEnabled(true);
                Button5.setEnabled(true);
                Button6.setEnabled(true);
                Button7.setEnabled(true);
                Button8.setEnabled(true);
                Button9.setEnabled(true);
                ButtonStar.setEnabled(false);// *键无效
                ButtonSharp.setEnabled(false);//#键无效
                break;
            case(manualDialState):
                dialButton.setEnabled(false);//拨号按钮无效
                directListenToggle.setEnabled(false);//免提键无效
                redialButton.setEnabled(false);//重播键无效
                hangupButton.setEnabled(true);// 挂断键有效
                pauseToggle.setSelected(false);//未选暂停键.
                pauseToggle.setEnabled(false);//暂停键无效.
                //saveButton.setEnabled(true);//保存键有效
                storeButton.setEnabled(false);//存储键无效
                Button0.setEnabled(true);//数字键全有效
                Button1.setEnabled(true);
                Button2.setEnabled(true);
                Button3.setEnabled(true);
                Button4.setEnabled(true);
                Button5.setEnabled(true);
                Button6.setEnabled(true);
                Button7.setEnabled(true);
                Button8.setEnabled(true);
                Button9.setEnabled(true);
                ButtonStar.setEnabled(true);// *键有效
                ButtonSharp.setEnabled(true);//#键有效
                break;
            case(connectState):
                dialButton.setEnabled(false);//拨号按钮无效
                directListenToggle.setEnabled(false);//免提键无效
                redialButton.setEnabled(false);//重播键无效
                hangupButton.setEnabled(true);// 挂断键有效
                pauseToggle.setSelected(false);//未选暂停键.
                pauseToggle.setEnabled(true);//暂停键有效.
                //saveButton.setEnabled(true);//保存键有效
                storeButton.setEnabled(true);//存储键有效
                Button0.setEnabled(false);//数字键全无效
                Button1.setEnabled(false);
                Button2.setEnabled(false);
                Button3.setEnabled(false);
                Button4.setEnabled(false);
                Button5.setEnabled(false);
                Button6.setEnabled(false);
                Button7.setEnabled(false);
                Button8.setEnabled(false);
                Button9.setEnabled(false);
                ButtonStar.setEnabled(false);// *键无效
                ButtonSharp.setEnabled(false);//#键无效                
                break;
        }
    }
    
    /** 初始化Applet。加载声音文件,初始化界面,建立Socket连接初始化地址簿
     */    
    public void init() {
        super.init();
        refreshComponent(currentState);        
        busyAudio=getAudioClip(getCodeBase(),"audio/busyAudio.wav");;
        ringAudio=getAudioClip(getCodeBase(),"audio/ringing.wav");
        directListenAudio=getAudioClip(getCodeBase(),"audio/directListenAudio.wav");
        hangUpAudio=getAudioClip(getCodeBase(),"audio/hangUpAudio.wav");
        dialNonDigitAudio=getAudioClip(getCodeBase(),"audio/dialNonDigitAudio.wav");
        for(int i=0;i<10;i++){
            dialDigitAudio[i]=getAudioClip(getCodeBase(),"audio/"+i+".AU");
        }
        initPhoneText();//初始化地址簿
    }    
                
    /** 开始执行Applet
     */    
    public void start() {
        super.start();        
    }    
        
    /** 进入进入初始状态
     * @param fromState 从哪个状态进入的初始状态
     */    
    private void enterInitialState(int fromState) {
        currentState=initialState;//改变状态 
        this.refreshComponent(currentState);//改变当前的控件状态
    }
    
    /** 进入自动拨号状态A
     * @param fromState 从哪个状态进入的自动拨号状态A
     */    
    private void enterAutoDialAState(int fromState) {
            fromStateAuto=fromState;//记录从哪个状态进入自动拨号状态A
            currentState=autoDialAState;
            refreshComponent(currentState);
    }
    
    /** 进入自动拨号状态B
     * @param fromState 从哪个状态进入的自动拨号状态B
     * @param dialNum 自动拨号的号码
     */    
    private void enterAutoDialBState(int fromState, java.lang.String dialNum) {
        if(fromState!=autoDialAState){//不从自动拨号A状态进入
             fromStateAuto=fromState;//记录从哪个状态进入自动拨号状态
         }
         //autoDialInterrupted=false;//自动拨号进程未被中断
         currentState=autoDialBState;
         refreshComponent(currentState);
         autoDialThread= new AutoDialWorker(dialNum);
         autoDialThread.start();
    }
    
    /** 进入手动拨号状态
     * @param fromState 从哪个状态进入的手动拨号状态
     */    
    private void enterManualDialState(int fromState) {
            firstDial=false; 
            noOfNumber=0;
            switch(fromState){
                case(initialState):
                    currentState=manualDialState;//更新当前状态
                    fromStateMan=fromState;
                    refreshComponent(currentState);
                    break;
                case(directListenState):
                    currentState=manualDialState;//更新当前状态
                    fromStateMan=fromState;
                    leaveDirectListenState();
                    refreshComponent(currentState);
                    break;
                case(autoDialAState):
                    currentState=manualDialState;//更新当前状态
                    fromStateMan=fromStateAuto;
                    refreshComponent(currentState);
                    break;
                case(autoDialBState):
                    //如果是从自动拨号状态B进入拨号的则只需更新拨号的计数,
                    //不用更新状态,自动拨号状态B不过是借用手动拨号的处理过程而已
                    break;
            }            
    }
    
    /** 进入连接状态
     * @param fromState 从哪个状态进入的连接状态
     * @param phoneNum 准备拨出的号码
     */    
    private void enterConnectState(int fromState, java.lang.String phoneNum) {        
                    switch(fromState){//存储从那个初态进入连接状态的
                        case(manualDialState):
                            fromStateCon=fromStateMan;
                            break;
                        case(autoDialBState):
                            fromStateCon=fromStateAuto;
                            break;
                    }
                    lastDialNumber=phoneNum;
                        //记录本次拨的号码为重播作准备
                    phoneNumDisp.setText(phoneNum);
                    currentState=connectState;                    
                    refreshComponent(currentState);                   
                    //??根据概率发出电话铃声或占线声
                    if(Math.random() >0.5){
                        connectAudio=ringAudio;
                    }
                    else{
                        connectAudio=busyAudio;
                    }
                    connectAudio.loop();
    }
                    
    
    /** 离开手动拨号状态
     */    
    private void leaveManualDialState() {
        firstDial=true;//恢复firstDial的值
        phoneNumDisp.setText("");//清除拨出的电话号码
    }
    
    /** 离开自动拨号状态B
     */    
    private void leaveAutoDialBState() {        
        firstDial=true;//恢复firstDial的值        
        phoneNumDisp.setText("");//清除拨出的电话号码
    }
    
    /** 离开手动连接状态
     */    
    private void leaveConnectState() {
        phoneNumDisp.setText("");//清除拨出的电话号码               
        connectAudio.stop();//停止呼叫
    }
    
    /** 回退到某个状态
     * @param toState 回退到的目的状态
     */    
    private void goBack(int toState) {
        switch(toState){
            case(initialState):
                enterInitialState(currentState);
                break;
            case(directListenState):
                enterDirectListenState(currentState);
                break;
        }                
    }
    
    /** 进入免提状态
     * @param fromState 从哪个状态进入的免提状态
     */    
    private void enterDirectListenState(int fromState) {
        currentState=directListenState;
        directListenAudio.loop();
        refreshComponent(currentState);
    }
    
    /** 离开免提状态。
     */    
    private void leaveDirectListenState() {
        directListenAudio.stop();
    }    
    
    /** 初始化电话地址簿。
     */    
    private void initPhoneText() {
        if(getCodeBase().getHost()==null){//host域为空,表示从本地主机启动
            host="127.0.0.1";
        }
        else{
            host=getCodeBase().getHost();
        }
        try{
           System.out.println("Connect to server,Wait.....");
           phoneAddSocket=new Socket(host,1200);
           System.out.println("Server Conected");
	   phoneAddSocket.getOutputStream().write(PhoneSimulator.initialAdd);
           //表示是在初始化时加载地址簿
	   BufferedWriter out=new BufferedWriter(
                       new OutputStreamWriter
			(phoneAddSocket.getOutputStream()));   
           String path=getDocumentBase().getPath();           
	   path=path.substring(1,path.lastIndexOf("/")+1);	   
	   out.write(path);
           out.newLine();
           out.flush();           
           System.out.println("path: "+path);
	phoneAddSocket.getOutputStream().write(PhoneSimulator.readPhoneAdd);//向服务器表明想读出数据
           if(phoneAddSocket.getInputStream().read()==PhoneAddServer.Approved_Operation){ 
                //用户确认要从从磁盘中读出地址簿的初始值
                BufferedReader in=new BufferedReader(
                        new InputStreamReader(phoneAddSocket.getInputStream()));
                String add=null;

⌨️ 快捷键说明

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