Java 如何开/关';信号灯';使用DataInputStream?

Java 如何开/关';信号灯';使用DataInputStream?,java,swing,user-interface,network-programming,Java,Swing,User Interface,Network Programming,我想做一个程序,可以通过网络发送信号使用DataInputStream,但我有一个算法的问题 程序其实很简单。我只需要做两个GUI。一个是颜色按钮(红色、黄色和蓝色按钮),另一个只有三个形状,当我们单击按钮时会改变颜色 下面是客户端(信号按钮)代码 这是服务器(信号灯)。这就是问题所在。 对不起,如果我的代码不是那么有效 import javax.swing.JPanel; import javax.swing.*; import java.awt.event.*; import java.aw

我想做一个程序,可以通过网络发送信号使用DataInputStream,但我有一个算法的问题

程序其实很简单。我只需要做两个GUI。一个是颜色按钮(红色、黄色和蓝色按钮),另一个只有三个形状,当我们单击按钮时会改变颜色

下面是客户端(信号按钮)代码

这是服务器(信号灯)。这就是问题所在。 对不起,如果我的代码不是那么有效

import javax.swing.JPanel;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.net.*;
import java.io.*;

public class lamp extends JFrame{
    ServerSocket ss = null;
    Socket s = null;
    InputStream in = null;
    DataInputStream dis = null;
    String iro;
    int s1,s2,s3;
    private Container contentPane;
    public lamp(String title){
        super(title);
            addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent we){
                System.exit(0);
            }
        });
        setSize(670,300);
        setResizable(false);
        setVisible(true);
    }
    public void paint(Graphics g){
        g.setColor(Color.blue);
        g.drawOval(10,50,200,200);
        g.setColor(Color.yellow);
        g.drawOval(220,50,200,200);
        g.setColor(Color.red);
        g.drawOval(430,50,200,200);
        try{
            ss = new ServerSocket(54321);
            s = ss.accept();
            in = s.getInputStream();
            dis = new DataInputStream(in);
            iro = dis.readUTF();
            s1 = 0;
            s2 = 0;
            s3 = 0;
            if(iro=="1"){
                if(s1==0){
                    s1=1;
                    g.setColor(Color.blue);
                    g.fillOval(10,50,200,200);
                    System.out.println("received blue");
                }else{
                    s1=0;
                    g.setColor(Color.blue);
                    g.fillOval(10,50,200,200);
                    System.out.println("received blue");
                }       
            }
            //its the same statement for yellow and red
        }catch(Exception e){
            System.out.println("error");
        }
     }
    public static void main(String []args){
        new lamp("lamp");
    }
}
结果

error
error
error
error
error

有什么想法吗?

一般来说,您的方法是错误的,请看一看,更多详细信息请参见到您的
catch
块,在该块中打印错误以获取有关原因的更多详细信息要查看错误原因,请更改System.out.println(“错误”);使用e.printStackTrace();然后公布结果again@MadProgrammer谢谢你的建议。我已经使用了
System.err.println(to.String()),结果是“地址已在使用”。你能教我如何在切换到其他颜色时“关闭”地址吗?一般来说,你的方法是错误的,请看一看,更多详细信息请参见sadd
e.printStackTrace()
到您的
catch
块,在该块中打印错误以获取有关原因的更多详细信息要查看错误原因,请更改System.out.println(“错误”);使用e.printStackTrace();然后公布结果again@MadProgrammer谢谢你的建议。我已经使用了
System.err.println(to.String()),结果是“地址已在使用”。你能教我如何在切换到其他颜色时“关闭”地址吗?
error
error
error
error
error