запись вывода в textarea в другом классе - PullRequest
0 голосов
/ 26 июля 2011

Привет, я новичок в Java и застрял здесь, уже довольно давно я могу двигаться вперед;я создал графический интерфейс для системы чата (хотя и очень грубый, потому что я использовал файл справки java и много чего еще никогда не делал).но у меня есть другой код, который стоит сам по себе, вообще без графического интерфейса, все выходы находятся в командной строке.Теперь я хочу добавить все выходные данные в 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

1 Ответ

0 голосов
/ 26 июля 2011

РЕДАКТИРОВАТЬ: перечитать код и заметил, что код GUI на самом деле содержит экземпляр клиента чата. Рассматривали ли вы возможность сделать клиент чата видимым для событий клиента чата, а затем установить графический интерфейс в качестве прослушивателя этих событий?

...