你用的是ObjectInputStream 和 ObjectOutputStream 传输数据 吗?

解决方案 »

  1.   

    我的思路是: 把字符串发送给Web服务器Server,如果Server返回的是结果字符串,此次任务结束;否则,若Server返回的是字符串“Busy”,则弹出对话框,让用户选择等待与否。如果用户选择等待,则再发字符串“1”给Server,继续等待从Server返回的结果或“Busy”信号。如果用户不等待,此次结束。当接收到Server传来的字符串”Busy“时,我在弹出的对话框中选择“等待‘,即把”1”发送给了Server,Server发送了结果(不是“Busy”),但我却读不到,出现了上述错误!请问是什么原因,谢谢!!急啊!!

    我的线程的入口函数如下:
    public void run() {
        //作业是否完成
        boolean jobFinished = false;
        //作业是否取消
        boolean jobCancel = false;
        OutputStream out = null;
        ObjectOutputStream oout = null;
        InputStream inputS = null;
        ObjectInputStream objInputS = null;    System.out.println("执行到getSocket之前!");
        Socket s = getScoket();    try {
          System.out.println("进入try..");
          //将任务的属性情况发送给Web服务器
          inputS = s.getInputStream();
          // objInputS = new ObjectInputStream(inputS);
          out = s.getOutputStream();
          oout = new ObjectOutputStream(out);
          //将作业发送给Web服务器
          oout.writeObject(job);
          oout.flush();      System.out.println("已将任务发送给WebServer,请等待回应........");      //判断接收到的数据是否是仪器的“Busy”信号
          //BufferedReader bufReader=new BufferedReader(inputSR);
          // DataInputStream  dataInputS=new DataInputStream(inputS);
          //当作业没有完成,并且没有取消时
          while ( (!jobFinished) && (!jobCancel)) {
            //如果while外,try内,用objInputS = new ObjectInputStream(inputS);则出错
            objInputS = new ObjectInputStream(inputS);
            //接收从Web服务器传来的消息
            Object obj = objInputS.readObject();        System.out.println("返回的对象是:"+obj);
          //  System.out.println(obj);
            //如果传来的是"服务器忙"的消息
            if (obj.toString().equals("Busy")) {
              System.out.println("服务器忙!!");
              //在applet上弹出一个询问对话框
              //如果用户要等待,给Web服务器发送”1“,表示继续,否则发送”0“,将接收的任务放弃
              if (applet.queryDialog() == 1) {
                oout.writeObject("1");
                oout.flush();
                System.out.println("Continue");
              }
              else {
                oout.writeObject("0");
                oout.flush();            //将标记jobCancel置为true
                jobCancel = true;
                System.out.println("stop");
              }
            }
            //服务器传来的是作业的测量结果
            else {
              //返回的任务结果
              jR = (jobReturn) obj;
              //将标记jobFinished置为true
              jobFinished = true;
            }
          }      out.close();
          oout.close();
          s.close();      setMeasuredValue(jR);
          drawData(jR);
        }
        catch (IOException e) {
          System.out.println("send object error!");
          System.out.println(e.getMessage());
        }
        catch (ClassNotFoundException e) {
          System.out.println("ClassNotFound error!");
          e.printStackTrace();
        }
        finally {
          try {
            if (out != null) {
              out.close();
            }
            if (oout != null) {
              oout.close();
            }
            if (inputS != null) {
              inputS.close();
            }
            if (objInputS != null) {
              objInputS.close();
            }
            if (clientSocket != null) {
              clientSocket.close();
            }
          }
          catch (IOException e) {
            System.out.println("IO error in finally statement");
            e.printStackTrace();
          }
        }