Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将对象从客户端发送到服务器_Java_Swing - Fatal编程技术网

Java 将对象从客户端发送到服务器

Java 将对象从客户端发送到服务器,java,swing,Java,Swing,我正在编写一个程序,服务器从服务器应用程序中的PaintPanel绘制形状,客户端可以在自己的应用程序中看到这些形状。目前,服务器可以将形状数据发送到客户端,但客户端仍然无法看到它 用于发送形状数据的服务器代码 private void sendShape(Graphics drawedShape) { try { oos.writeObject(drawedShape); oos.flush(); disp

我正在编写一个程序,服务器从服务器应用程序中的PaintPanel绘制形状,客户端可以在自己的应用程序中看到这些形状。目前,服务器可以将形状数据发送到客户端,但客户端仍然无法看到它

用于发送形状数据的服务器代码

private void sendShape(Graphics drawedShape) {
        try {
            oos.writeObject(drawedShape);
            oos.flush();
            dispMessage("\n Teacher:" + "Shape sent!" );
        }catch(IOException e){
            jta.append("\nError");
        }
    }
private void processConn() throws IOException {
        send("Successful");
        setButtonEnabled(true);
        String msg = "";
        Graphics object;

        do {
            try                

            {
                   Object incomingObject = ois.readObject();

                   if(incomingObject.getClass().toString().contains("Graphics"))
                   {
                          object = (Graphics) ois.readObject();
                          dispMessage("\n" + object);

                   } else
                   {
                          dispMessage("\n" + "Unknown object!");
                   }
            }

            catch (ClassNotFoundException e) {
                dispMessage("Unknown");
            }
        }
      while (!msg.equals("S:ExitTheSystem"));
    }
用于接收形状数据的客户端代码

private void sendShape(Graphics drawedShape) {
        try {
            oos.writeObject(drawedShape);
            oos.flush();
            dispMessage("\n Teacher:" + "Shape sent!" );
        }catch(IOException e){
            jta.append("\nError");
        }
    }
private void processConn() throws IOException {
        send("Successful");
        setButtonEnabled(true);
        String msg = "";
        Graphics object;

        do {
            try                

            {
                   Object incomingObject = ois.readObject();

                   if(incomingObject.getClass().toString().contains("Graphics"))
                   {
                          object = (Graphics) ois.readObject();
                          dispMessage("\n" + object);

                   } else
                   {
                          dispMessage("\n" + "Unknown object!");
                   }
            }

            catch (ClassNotFoundException e) {
                dispMessage("Unknown");
            }
        }
      while (!msg.equals("S:ExitTheSystem"));
    }

我发现您的代码存在一些重大问题,并提供了一些解决方案:

  • 不要在Swing事件线程上读取流,因为这将阻止线程可能冻结应用程序
  • 不要发送和接收图形对象,而是逻辑(非GUI、非图形)对象——例如形状参数和颜色,然后使用它们在客户端绘制
  • 考虑以文本可读的方式发送和接收数据,例如XML或JSON文本。这使得调试变得更加容易 <> LI>如果你必须发送二进制序列化数据(例如,如果它是一个赋值要求),那么考虑发送形状对象、实现代码“> java .AWT.形状< /代码>接口的对象,因为这些可以很容易地与你的客户端JPanel的PrimeTeClient方法的图形(实际上是一个图形化的2D)对象相结合。
  • 使用SwingWorker来接收和处理传入的数据,特别是使用其发布/处理方法对来帮助实现这一点

  • 对于一个更具体的答案和可能的代码,考虑将你的最佳程序发布到你的问题

    谢谢,我会和你的第二个解决方案一起去,我认为它会更好地工作。DontKnowMuchButGettingBetter@RocketMonkey:但请注意,据我所知,形状对象不包含颜色信息,必须单独发送或合并到自定义对象中