Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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中的GUI客户机-服务器_Java_User Interface_Object_Client Server - Fatal编程技术网

JAVA中的GUI客户机-服务器

JAVA中的GUI客户机-服务器,java,user-interface,object,client-server,Java,User Interface,Object,Client Server,伙计们,我已经尝试了很多方法来做到这一点,但我不能设法让它工作。基本上,我有一个客户端(通过终端)和一个服务器,询问姓名、标记和年龄,当我们输入这三个时,服务器会写回详细信息。我的问题是如何使其成为完整的GUI,以便在GUI上编写详细信息并在那里接收它们 这是客户端的代码 import java.util.*; import java.net.*; import java.io.*; public class Student implements Serializable { String n

伙计们,我已经尝试了很多方法来做到这一点,但我不能设法让它工作。基本上,我有一个客户端(通过终端)和一个服务器,询问姓名、标记和年龄,当我们输入这三个时,服务器会写回详细信息。我的问题是如何使其成为完整的GUI,以便在GUI上编写详细信息并在那里接收它们

这是客户端的代码

import java.util.*;
import java.net.*;
import java.io.*;
public class Student implements Serializable
{

String name;
int mark;
int age;



public Student (String n, int a,int ag){
name=n;mark=a;age=ag;
  } 

public String toString(){
    return "Name:"+name+" Age: "+age+ " Mark:"+mark ;
}
}


class objectClient1{
public static void main(String[] args) throws Exception{

Socket s = new Socket("localhost",5000);
ObjectOutputStream p =new ObjectOutputStream(s.getOutputStream());
ObjectInputStream q =new ObjectInputStream(s.getInputStream());
Scanner b = new Scanner(System.in); 
int c;
System.out.println("Student name: ");
while(b.hasNext()) {
 String name=b.nextLine();  
 System.out.println("Mark: ");
 int mark=Integer.parseInt(b.nextLine());

System.out.println("Age: ");
 int age=Integer.parseInt(b.nextLine());
 p.writeObject(new Student(name,mark,age));
 p.flush();
 System.out.println(q.readObject());

   }
  }
 }
这是针对服务器的:

import java.io.*;
import java.net.*;

class objectEchoServer
{
 public static void main(String[] argv) throws Exception
 {ServerSocket s = new ServerSocket(5000);
 Socket t = s.accept();//wait for client to connect
 System.out.println("server connected");
 ObjectInputStream b = new ObjectInputStream(t.getInputStream());
 ObjectOutputStream q = new ObjectOutputStream(t.getOutputStream());
 Object c;
 while((c=b.readObject())!=null) { 
                        q.writeObject(c);      

           }
             }
 }

非常感谢您的帮助

这里有全部内容:

对于客户:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class ClientSocketFrame extends JFrame implements ActionListener {
    JLabel lblName;
    JLabel lblAge;
    JLabel lblMark;
    JTextField txtName;
    JTextField txtAge;
    JTextField txtMark;
    JButton btnProcess;
    JTextArea txtS;

    public ClientSocketFrame() {
        this.setTitle("Simple Sample");
        this.setSize(320, 240);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);

        lblName = new JLabel("Name: ");
        lblName.setBounds(10, 10, 90, 21);
        add(lblName);

        txtName = new JTextField();
        txtName.setBounds(105, 10, 90, 21);
        add(txtName);

        lblAge = new JLabel("Age: ");
        lblAge.setBounds(10, 35, 90, 21);
        add(lblAge);

        txtAge = new JTextField();
        txtAge.setBounds(105, 35, 90, 21);
        add(txtAge);

        lblMark = new JLabel("Mark: ");
        lblMark.setBounds(10, 60, 90, 21);
        add(lblMark);

        txtMark = new JTextField();
        txtMark.setBounds(105, 60, 90, 21);
        add(txtMark);

        btnProcess = new JButton("Process");
        btnProcess.setBounds(200, 40, 90, 21);
        btnProcess.addActionListener(this);
        add(btnProcess);

        txtS = new JTextArea();
        txtS.setBounds(10, 85, 290, 120);
        add(txtS);

        this.setVisible(true);
    }

    public static void main(String[] args) {
        new ClientSocketFrame();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(btnProcess)) {
            try {
                processInformation();
            } catch (UnknownHostException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    }

    public void processInformation() throws UnknownHostException, IOException {
        Socket s = new Socket("localhost", 5000);
        ObjectOutputStream p = new ObjectOutputStream(s.getOutputStream());

        String name = txtName.getText();
        int mark = Integer.parseInt(txtMark.getText());
        int age = Integer.parseInt(txtAge.getText());

        p.writeObject(new Student(name, age, mark));
        p.flush();

        // Here we read the details from server
        BufferedReader response = new BufferedReader(new InputStreamReader(
                s.getInputStream()));
        txtS.setText("The server respond: " + response.readLine());
        p.close();
        response.close();
        s.close();
    }

}
对于服务器:

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ObjectServer {

    public static void main(String[] argv) throws Exception {
        ServerSocket s = new ServerSocket(5000);
        System.out.println("Server started");
        while (true) {
            Socket t = s.accept();// wait for client to connect
            System.out.println("server connected");
            ObjectInputStream b = new ObjectInputStream(t.getInputStream());
            Student received = (Student) b.readObject();
            PrintWriter output = new PrintWriter(t.getOutputStream(), true);
            output.println("Student " + received.getName() + " with age: "
                    + received.getAge() + " has been received");
            b.close();
            output.close();
            t.close();
        }

    }
}
不要忘记您的bean或dto:

public class Student implements Serializable {

    private String name;
    private int age;
    private int mark;

    public Student(String name, int age, int mark) {
        this.name = name;
        this.age = age;
        this.mark = mark;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getMark() {
        return mark;
    }

    public void setMark(int mark) {
        this.mark = mark;
    }

}

你想知道如何使用swing实现这一点吗?或者只是想在你自己的终端上收到响应?它在终端上工作得很完美我想用swing我尝试了一些奇怪的东西,从另一个代码中取出一些片段并放好,但唯一的事情是面板弹出,什么也没有发生。我已经回答了,也许你可以放一些UI代码,由于应用程序在终端中运行完美,问题一定是UI代码以及UI如何调用您的代码。我已经编辑了我的答案,您可以使用答案的代码(只需复制和粘贴),我刚刚将您的代码改编为swing。谢谢!我现在要试试。我没有写“完整的代码”,只是写基本的结构。记住,你必须为文本字段、按钮和文本区域设置界限。以及定义框架的布局并将组件添加到框架中。致以最良好的问候。在我继续之前,你能告诉我为什么上面说找不到txtS符号吗?再次感谢您的帮助。哦,在代码中,如果您可以看到,所有组件都在方法init中声明,您必须将它们声明为全局变量,以便您可以在方法actionPerformed中使用它们。我已经编辑了将组件声明为全局的代码,我必须这样做。对不起,我又把它弄丢了。。。这让整个秋千都搞混了。我修正了这个问题,现在它说可以找到student()符号,这很明显,因为它从未实现过。非常混乱