将输出写入另一个类中的文本区域

发布于 2024-11-26 10:13:40 字数 7129 浏览 1 评论 0原文

嗨,我是java新手,我被困在这里,已经有一段时间了,现在我可以继续前进了;我已经为聊天系统创建了一个GUI界面(虽然很粗糙,因为我使用了java帮助文件,而且很多我以前从未做过)。但我有另一个独立的代码,根本没有 GUI,所有输出都在命令提示符下。现在我想将所有输出附加到我创建的 GUI 中。请帮助查看下面的代码并提出方法和步骤来帮助解决这个问题...请这不是大学的作业,我是一名毕业生并正在工作,所以我在有时间的时候这样做,因为我相信知道java是一门很大的学问。谢谢您的宝贵时间。

这是我创建的聊天 GUI 类

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class  MainView extends JFrame {

protected JLabel msgLabel, bannerLabel;
protected JButton sendBtn;
protected JTextArea genMsg, frndLst;
protected JTextField msgF;
protected JMenuBar menubar;
protected JMenu loginmenu, aboutmenu;
protected JMenuItem loginitem, disconnectitem, seperatoritem, quititem, aboutitem;
protected Toolkit toolkit; 
MultiThreadChatClient chatClient;
public MainView()   {

    toolkit = Toolkit.getDefaultToolkit();      
    if(toolkit.getScreenSize().getWidth() > 600)
    setSize(600, 575);
    else
    setSize((int)toolkit.getScreenSize().getWidth(),(int toolkit.getScreenSize().getHeight() - 20);         
    setResizable(false);
    Dimension dimension = getSize();    
    setLayout(new FlowLayout());    

    setTitle("FRESHER MARKETING COMPANY");      
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent evt) { System.exit(0);}});


    menubar = new JMenuBar();
    loginmenu = new JMenu("Login");     
    loginitem = new JMenuItem("Login");

    disconnectitem = new JMenuItem("Disconnect");
    seperatoritem = new JMenuItem("---------------");
    quititem = new JMenuItem("Quit");

    loginmenu.add(loginitem);
    loginmenu.add(disconnectitem);
    loginmenu.add(seperatoritem);
    loginmenu.add(quititem);

    aboutmenu = new JMenu("Help ");
    aboutitem = new JMenuItem("About ");

    aboutmenu.add(aboutitem);

    menubar.add(loginmenu);
    menubar.add(aboutmenu);
    setJMenuBar(menubar);

    Container container = getContentPane();
    container.setLayout(new FlowLayout());

    // create an ImageIcon
    ImageIcon banner =new ImageIcon("images\\defaultbanner.gif");  
    bannerLabel = new JLabel(banner);
    container.add(bannerLabel);     

    // create General Message Screen
    genMsg = new JTextArea(30,45);
              genMsg.setEditable(false);
              genMsg.setFont(new java.awt.Font("Times New Roman", 0, 12)); // NOI18N
    genMsg.setLineWrap(true);
    container.add( new JScrollPane( genMsg ));

    // create Friend List View
    frndLst = new JTextArea(30, 15);
    frndLst.setFont(new java.awt.Font("Times New Roman", 0, 12)); // NOI18N
    container.add( new JScrollPane( frndLst));
    frndLst.setEditable(false);
    frndLst.setLineWrap(true);

    msgLabel = new JLabel ("Message:");
    container.add(msgLabel);

    // create Message Field
    msgF = new JTextField(38);
    msgF.setEnabled( true );
    msgF.setText("");
              msgF.requestFocus();
    msgF.addActionListener(

    new ActionListener() 
    {
        // send message to client
        public void actionPerformed( ActionEvent event )
        {
        //  sendData( event.getActionCommand() );
        }
    } // end anonymous inner class
    ); // end call to addActionListener
    container.add(msgF);

        // create Send Button
    sendBtn = new JButton ("Send");
    container.add(sendBtn);


    setVisible( true );


}

public static void main(String[] args) 
{
MainView application = new MainView();

application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
   }

,这是我要附加的聊天多线程系统。

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

public class MultiThreadChatServer{

// Declaration section:
// declare a server socket and a client socket for the server
// declare an input and an output stream

static  Socket clientSocket = null;
static  ServerSocket serverSocket = null;

// This chat server can accept up to 10 clients' connections

static  clientThread t[] = new clientThread[10];           

public static void main(String args[]) {

// The default port

int port_number=2222;

if (args.length < 1)
    {
    System.out.println("Usage: java MultiThreadChatServer \n"+
               "Now using port number="+port_number);
    } else {
    port_number=Integer.valueOf(args[0]).intValue();
    }

// Initialization section:
// Try to open a server socket on port port_number (default 2222)
// Note that we can't choose a port less than 1023 if we are not
// privileged users (root)

    try {
    serverSocket = new ServerSocket(port_number);
    }
    catch (IOException e)
    {System.out.println(e);}

// Create a socket object from the ServerSocket to listen and accept 
// connections.
// Open input and output streams for this socket will be created in 
// client's thread since every client is served by the server in
// an individual thread

while(true){
    try {
    clientSocket = serverSocket.accept();
    for(int i=0; i<=9; i++){
        if(t[i]==null)
        {
            (t[i] = new clientThread(clientSocket,t)).start();
            break;
        }
    }
    }
    catch (IOException e) {
    System.out.println(e);}
  }
     }
  } 

  // This client thread opens the input and the output streams for a particular client,
 // ask the client's name, informs all the clients currently connected to the 
 //server about the fact that a new client has joined the chat room, 
// and as long as it receive data, echos that data back to all other clients.
// When the client leaves the chat room this thread informs also all the
// clients about that and terminates. 

class clientThread extends Thread{

DataInputStream is = null;
PrintStream os = null;
Socket clientSocket = null;       
clientThread t[]; 

public clientThread(Socket clientSocket, clientThread[] t){
this.clientSocket=clientSocket;
    this.t=t;
}

public void run() 
{
String line;
    String name;
try{
    is = new DataInputStream(clientSocket.getInputStream());
    os = new PrintStream(clientSocket.getOutputStream());
    os.println("Enter your name.");
    name = is.readLine();
    os.println("Hello "+name+" to our chat room.\nTo leave enter /quit in a new line"); 
    for(int i=0; i<=9; i++)
    if (t[i]!=null && t[i]!=this)  
        t[i].os.println("*** A new user "+name+" entered the chat room !!! ***" );
    while (true) {
    line = is.readLine();
            if(line.startsWith("/quit")) break; 
    for(int i=0; i<=9; i++)
        if (t[i]!=null)  t[i].os.println("<"+name+"> "+line); 
    }
    for(int i=0; i<=9; i++)
    if (t[i]!=null && t[i]!=this)  
        t[i].os.println("*** The user "+name+" is leaving the chat room !!! ***" );

    os.println("*** Bye "+name+" ***"); 

    // Clean up:
    // Set to null the current thread variable such that other client could
    // be accepted by the server

    for(int i=0; i<=9; i++)
    if (t[i]==this) t[i]=null;  

    // close the output stream
    // close the input stream
    // close the socket

    is.close();
    os.close();
    clientSocket.close();
}
catch(IOException e){};
 }
}

任何建议都可以。无论是实现这一目标的步骤、使事情变得更容易的链接、代码片段...谢谢.. 我想要一个有关如何将 MultiThreadChatServer 类的输出附加到 MainView 类中的文本区域的示例

hi i am new to java and am stuck here, been quite a while now that i can move forward; i have created a GUI interface for a chat system(although very rough because i have used the java help file and alot i have never done before). but i have another code which is standing on its own, no GUI at all, all out put are on command prompt. now i want to append all the output to the GUI that i have created. please help take a look at the codes below and suggest ways and stepps to help figure it out... please this is not an assignment from college, i am a graduate and working so i do this when i have time, because i believe knowing java is a great knowledge. thank you for your time.

this is the chat GUI Class that i created

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class  MainView extends JFrame {

protected JLabel msgLabel, bannerLabel;
protected JButton sendBtn;
protected JTextArea genMsg, frndLst;
protected JTextField msgF;
protected JMenuBar menubar;
protected JMenu loginmenu, aboutmenu;
protected JMenuItem loginitem, disconnectitem, seperatoritem, quititem, aboutitem;
protected Toolkit toolkit; 
MultiThreadChatClient chatClient;
public MainView()   {

    toolkit = Toolkit.getDefaultToolkit();      
    if(toolkit.getScreenSize().getWidth() > 600)
    setSize(600, 575);
    else
    setSize((int)toolkit.getScreenSize().getWidth(),(int toolkit.getScreenSize().getHeight() - 20);         
    setResizable(false);
    Dimension dimension = getSize();    
    setLayout(new FlowLayout());    

    setTitle("FRESHER MARKETING COMPANY");      
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent evt) { System.exit(0);}});


    menubar = new JMenuBar();
    loginmenu = new JMenu("Login");     
    loginitem = new JMenuItem("Login");

    disconnectitem = new JMenuItem("Disconnect");
    seperatoritem = new JMenuItem("---------------");
    quititem = new JMenuItem("Quit");

    loginmenu.add(loginitem);
    loginmenu.add(disconnectitem);
    loginmenu.add(seperatoritem);
    loginmenu.add(quititem);

    aboutmenu = new JMenu("Help ");
    aboutitem = new JMenuItem("About ");

    aboutmenu.add(aboutitem);

    menubar.add(loginmenu);
    menubar.add(aboutmenu);
    setJMenuBar(menubar);

    Container container = getContentPane();
    container.setLayout(new FlowLayout());

    // create an ImageIcon
    ImageIcon banner =new ImageIcon("images\\defaultbanner.gif");  
    bannerLabel = new JLabel(banner);
    container.add(bannerLabel);     

    // create General Message Screen
    genMsg = new JTextArea(30,45);
              genMsg.setEditable(false);
              genMsg.setFont(new java.awt.Font("Times New Roman", 0, 12)); // NOI18N
    genMsg.setLineWrap(true);
    container.add( new JScrollPane( genMsg ));

    // create Friend List View
    frndLst = new JTextArea(30, 15);
    frndLst.setFont(new java.awt.Font("Times New Roman", 0, 12)); // NOI18N
    container.add( new JScrollPane( frndLst));
    frndLst.setEditable(false);
    frndLst.setLineWrap(true);

    msgLabel = new JLabel ("Message:");
    container.add(msgLabel);

    // create Message Field
    msgF = new JTextField(38);
    msgF.setEnabled( true );
    msgF.setText("");
              msgF.requestFocus();
    msgF.addActionListener(

    new ActionListener() 
    {
        // send message to client
        public void actionPerformed( ActionEvent event )
        {
        //  sendData( event.getActionCommand() );
        }
    } // end anonymous inner class
    ); // end call to addActionListener
    container.add(msgF);

        // create Send Button
    sendBtn = new JButton ("Send");
    container.add(sendBtn);


    setVisible( true );


}

public static void main(String[] args) 
{
MainView application = new MainView();

application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
   }

and this is the Chat multithread system that i want to append.

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

public class MultiThreadChatServer{

// Declaration section:
// declare a server socket and a client socket for the server
// declare an input and an output stream

static  Socket clientSocket = null;
static  ServerSocket serverSocket = null;

// This chat server can accept up to 10 clients' connections

static  clientThread t[] = new clientThread[10];           

public static void main(String args[]) {

// The default port

int port_number=2222;

if (args.length < 1)
    {
    System.out.println("Usage: java MultiThreadChatServer \n"+
               "Now using port number="+port_number);
    } else {
    port_number=Integer.valueOf(args[0]).intValue();
    }

// Initialization section:
// Try to open a server socket on port port_number (default 2222)
// Note that we can't choose a port less than 1023 if we are not
// privileged users (root)

    try {
    serverSocket = new ServerSocket(port_number);
    }
    catch (IOException e)
    {System.out.println(e);}

// Create a socket object from the ServerSocket to listen and accept 
// connections.
// Open input and output streams for this socket will be created in 
// client's thread since every client is served by the server in
// an individual thread

while(true){
    try {
    clientSocket = serverSocket.accept();
    for(int i=0; i<=9; i++){
        if(t[i]==null)
        {
            (t[i] = new clientThread(clientSocket,t)).start();
            break;
        }
    }
    }
    catch (IOException e) {
    System.out.println(e);}
  }
     }
  } 

  // This client thread opens the input and the output streams for a particular client,
 // ask the client's name, informs all the clients currently connected to the 
 //server about the fact that a new client has joined the chat room, 
// and as long as it receive data, echos that data back to all other clients.
// When the client leaves the chat room this thread informs also all the
// clients about that and terminates. 

class clientThread extends Thread{

DataInputStream is = null;
PrintStream os = null;
Socket clientSocket = null;       
clientThread t[]; 

public clientThread(Socket clientSocket, clientThread[] t){
this.clientSocket=clientSocket;
    this.t=t;
}

public void run() 
{
String line;
    String name;
try{
    is = new DataInputStream(clientSocket.getInputStream());
    os = new PrintStream(clientSocket.getOutputStream());
    os.println("Enter your name.");
    name = is.readLine();
    os.println("Hello "+name+" to our chat room.\nTo leave enter /quit in a new line"); 
    for(int i=0; i<=9; i++)
    if (t[i]!=null && t[i]!=this)  
        t[i].os.println("*** A new user "+name+" entered the chat room !!! ***" );
    while (true) {
    line = is.readLine();
            if(line.startsWith("/quit")) break; 
    for(int i=0; i<=9; i++)
        if (t[i]!=null)  t[i].os.println("<"+name+"> "+line); 
    }
    for(int i=0; i<=9; i++)
    if (t[i]!=null && t[i]!=this)  
        t[i].os.println("*** The user "+name+" is leaving the chat room !!! ***" );

    os.println("*** Bye "+name+" ***"); 

    // Clean up:
    // Set to null the current thread variable such that other client could
    // be accepted by the server

    for(int i=0; i<=9; i++)
    if (t[i]==this) t[i]=null;  

    // close the output stream
    // close the input stream
    // close the socket

    is.close();
    os.close();
    clientSocket.close();
}
catch(IOException e){};
 }
}

any suggestions would do really. be it steps to achieve this, links to make things easier, a code snippet... thank you..
i would like an example on how to append the ouputs from MultiThreadChatServer class to the textarea in MainView class

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

红焚 2024-12-03 10:13:40

编辑:重新阅读代码并注意到 gui 代码实际上包含聊天客户端的实例。您是否考虑过让聊天客户端可观察聊天客户端事件,然后将 GUI 设置为这些事件的侦听器?

EDIT: re-read the code and noticed that the gui code actually holds an instance of the chat client. Have you considered making the chat client observable for chat client events and then setting the gui as a listener for those events?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文