Проблема в JFrames - PullRequest
       15

Проблема в JFrames

1 голос
/ 10 мая 2011

Я разрабатываю приложение для обмена сообщениями. У меня серверная программа работает правильно. На стороне клиента, сначала я создал графический интерфейс, который состоит из текстовой панели и текстового поля. Чат работает правильно. Затем я изменил клиентскую сторону для поддержки средства входа в систему, которое предоставляет текстовое поле для входа в систему, поле для ввода пароля и кнопку со знаком. Таким образом, после аутентификации входа в систему текущий JFrame устанавливается в значение false (false), и должен отображаться новый JFrame с окном чата, а сокетные соединения выполняются параллельно. Соединения с сокетом к серверу сделаны правильно, но требуемый графический интерфейс, то есть правильный JFrame, не сделан. В чем может быть проблема? Пожалуйста, помогите ..

Вот мой код ..

import java.net.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.text.*;
import javax.swing.event.*;


class Swing16 extends JPanel implements ActionListener
{

    public static JButton enterbutton,signin,chatbutton;
    public static JTextField txt,loginname,password;
    public static JTextPane textpane;
    public static JScrollPane sp;
    public static JLabel retrylabel;


    public static String str;
    public static String newline = "\n";
    public static String ss = "regular";

    public static StyledDocument doc,doc1;
    public static Icon icon1,icon2,icon3,icon4,icon5,icon6;

    public static InetAddress inet,newinet;
    public static Socket s,news;

    public static InputStream in,newin;
    public static OutputStream chatout,newout;

    public static BufferedReader newbr,chat;

    public static PrintWriter chatout1,newout1;
    public static int start;
    public static int end;
    public static int flag = 0;
    public static JFrame frm;


    class connecthread implements Runnable
    {
        Thread t;

        public connecthread()
        {
            t = new Thread(this);
            t.start();
        }

        public void run()
        {
            Swing16.makechatconnection();
        }
    }

    class alwaysrun implements Runnable
    {
        Thread t;

        public alwaysrun()
        {
            t = new Thread(this);
            t.start();
        }

        public void run()
        {
            Swing16.alwaystorun();
        }
    }


    public Swing16()
    {


        if(flag == 0)
        {
            enterbutton = new JButton("Enter");
            add(enterbutton);

            enterbutton.addActionListener(this);

        }


        else if(flag == 1)
        {


            loginname = new JTextField(10);
            add(loginname);

            password = new JTextField(10);
            add(password);


            signin = new JButton("SIGN IN");
            add(signin);

            signin.addActionListener(this);
        }


        else if(flag == 2)
        {

            chatbutton = new JButton("CHAT");
            add(chatbutton);
            chatbutton.addActionListener(this);

        }

        else if(flag == 3)
        {

            retrylabel = new JLabel("AUTHENTICATION FAILED! RETRY");
            add(retrylabel);


            loginname = new JTextField(10);
            add(loginname);

            password = new JTextField(10);
            add(password);


            signin = new JButton("SIGN IN");
            add(signin);

            signin.addActionListener(this);
        }




        else
        {

            GridBagLayout g = new GridBagLayout();
            setLayout(g);

            GridBagConstraints a = new GridBagConstraints();

            a.fill = GridBagConstraints.BOTH;
            a.weightx = 1.0;
            a.weighty = 1.0;
            textpane = new JTextPane();
            add(textpane,a);

            sp = new JScrollPane(textpane);
            a.gridwidth = GridBagConstraints.REMAINDER;
            a.fill = GridBagConstraints.BOTH;
            a.weightx = 1.0;
            a.weighty = 1.0;
            add(sp,a);
            textpane.setEditable(false);

            a.fill = GridBagConstraints.HORIZONTAL;
            a.anchor = GridBagConstraints.FIRST_LINE_START;
            txt = new JTextField(50);
            add(txt,a);

            icon1 = new ImageIcon("smile.png");
            icon2 = new ImageIcon("frown.png");
            icon3 = new ImageIcon("gasp.png");
            icon4 = new ImageIcon("grin.png");
            icon5 = new ImageIcon("tongue.png");
            icon6 = new ImageIcon("wink.png");


            txt.addActionListener(this);

            textpane.setEditorKit(new StyledEditorKit());
            Swing16.initListener();

            }

    }



    public void actionPerformed(ActionEvent ae)
    {


            String t;
            t = ae.getActionCommand();

            if(t.equals("Enter"))
            {

                flag = 1;
                frm.dispose();

                Swing16.makeGUI();

                /*try
                {

                    newinet = InetAddress.getLocalHost();
                    news = new Socket(newinet,1125);

                    newin = news.getInputStream();
                    newout = news.getOutputStream();


                    newout1 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(newout)),true);
                    newbr = new BufferedReader(new InputStreamReader(newin));


                }
                catch(UnknownHostException e)
                {
                    System.out.println("Error.....!!!" + e);
                }
                catch(IOException e)
                {
                    System.out.println("Error....!!!" + e);
                }*/

            }

            else if(t.equals("SIGN IN"))
            {
                String name, passwd,authenticationcode;
                name = loginname.getText();
                passwd = password.getText();


                frm.dispose();

                try
                {
                    /*newout1.println(name);
                    newout1.println(passwd);

                    authenticationcode = newbr.readLine();
                    if(authenticationcode.equals("V"))
                    {
                    */

                        flag = 2;

                        /*newbr.close();
                        newout1.close();

                        newin.close();
                        newout.close();


                        news.close();


                    }

                    else
                        flag = 3; */            
                }
                catch(Exception e)
                {
                    System.out.println(e + "I am exception in sign in block in actionPerformed funation");
                }


                Swing16.makeGUI();
            }



            else if(t.equals("CHAT"))
            {

                frm.dispose();
                flag = 4;

                Swing16.makeGUI();

                new connecthread();

                new alwaysrun();

            }


            else
            {
                try
                {
                doc1 = textpane.getStyledDocument();
                str = txt.getText();
                try 
                {

                    doc1.insertString(doc1.getLength(),"Me:" + str + newline,doc1.getStyle(ss));

                    String text=doc1.getText(start, end-start);

                                    int i= text.indexOf(":)");

                    int j= text.indexOf(":(");

                    int k = text.indexOf(":O");

                    int l = text.indexOf(":D");

                    int m = text.indexOf(":P");

                    int n = text.indexOf(";)");

                    while(i>=0) 
                    {
                                            final SimpleAttributeSet attrs=new SimpleAttributeSet(doc1.getCharacterElement(start+i).getAttributes());

                        if (StyleConstants.getIcon(attrs)==null)
                        {
                                                StyleConstants.setIcon(attrs, icon1);
                                                doc1.remove(start+i, 2);
                                                doc1.insertString(start+i,":)", attrs);
                                            }

                    i=text.indexOf(":)", i+2);
                                    }

                    while(j>=0) 
                    {
                                            final SimpleAttributeSet attrs=new SimpleAttributeSet(doc1.getCharacterElement(start+j).getAttributes());

                        if (StyleConstants.getIcon(attrs)==null)
                        {
                                                StyleConstants.setIcon(attrs, icon2);
                                                doc1.remove(start+j, 2);
                                                doc1.insertString(start+j,":(", attrs);
                                            }

                    j=text.indexOf(":(", j+2);
                                    }

                    while(k>=0) 
                    {
                                            final SimpleAttributeSet attrs=new SimpleAttributeSet(doc1.getCharacterElement(start+k).getAttributes());

                        if (StyleConstants.getIcon(attrs)==null)
                        {
                                                StyleConstants.setIcon(attrs, icon3);
                                                doc1.remove(start+k, 2);
                                                doc1.insertString(start+k,":O", attrs);
                                            }

                    k=text.indexOf(":O", k+2);
                                    }

                    while(l>=0) 
                    {
                                            final SimpleAttributeSet attrs=new SimpleAttributeSet(doc1.getCharacterElement(start+l).getAttributes());

                        if (StyleConstants.getIcon(attrs)==null)
                        {
                                                StyleConstants.setIcon(attrs, icon4);
                                                doc1.remove(start+l, 2);
                                                doc1.insertString(start+l,":D", attrs);
                                            }

                    l=text.indexOf(":D", l+2);
                                    }

                    while(m>=0) 
                    {
                                            final SimpleAttributeSet attrs=new SimpleAttributeSet(doc1.getCharacterElement(start+m).getAttributes());

                        if (StyleConstants.getIcon(attrs)==null)
                        {
                                                StyleConstants.setIcon(attrs, icon5);
                                                doc1.remove(start+m, 2);
                                                doc1.insertString(start+m,":P", attrs);
                                            }

                    m=text.indexOf(":P", m+2);
                                    }   

                    while(n>=0) 
                    {
                                            final SimpleAttributeSet attrs=new SimpleAttributeSet(doc1.getCharacterElement(start+n).getAttributes());

                        if (StyleConstants.getIcon(attrs)==null)
                        {
                                                StyleConstants.setIcon(attrs, icon6);
                                                doc1.remove(start+n, 2);
                                                doc1.insertString(start+n,":P", attrs);
                                            }

                    n=text.indexOf(":P", n+2);
                                    }   

                }
                catch(NullPointerException e)
                {
                    System.out.println("I am d culprit");
                }
                catch (Exception ble)
                {
                        System.out.println(ble);
                }


                txt.setText("");
                chatout1.println(str);
            }
            catch(NullPointerException e)
            {
                    System.out.println("I am the culprit");
            }
            catch(Exception e)
            {
                System.out.println(e);
            }       

        }

  }




    public static void initListener()
    {

        textpane.getDocument().addDocumentListener(new DocumentListener(){

        public void insertUpdate(DocumentEvent event) 
        {

            final DocumentEvent e=event;


            if (e.getDocument() instanceof StyledDocument)
            {
                            try
                {
                                    //doc=(StyledDocument)e.getDocument();
                                    start= Utilities.getRowStart(textpane,Math.max(0,e.getOffset()-1));
                                    end=Utilities.getWordStart(textpane,e.getOffset()+e.getLength());
                                }
                catch (BadLocationException e1) 
                {
                                    e1.printStackTrace();
                                }
                        }


             }

        public void removeUpdate(DocumentEvent e) 
        {

         }

        public void changedUpdate(DocumentEvent event) 
        {

        }
        });
    }


    public static void makeGUI()
    {
        frm = new JFrame("Chat Window");
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frm.add(new Swing16());
        frm.pack();
        frm.setVisible(true);
    }



    public static void makechatconnection()
    {
        try
        {

            inet = InetAddress.getLocalHost();
            s = new Socket(inet,1125);

            in = s.getInputStream();
            chatout = s.getOutputStream();


            chatout1 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(chatout)),true);

            chat = new BufferedReader(new InputStreamReader(in));
            if(chat == null)
            System.out.println("sskksks");

            chatout1.println("i get transmitted there..");
        }
        catch(UnknownHostException e)
        {
            System.out.println("Error.....!!!" + e);
        }
        catch(IOException e)
        {
            System.out.println("Error....!!!" + e);
        }
    }



    public static void alwaystorun()
    {
        try
            {

                while(true)
                {
                    String ss1=null;
                    ss1 = chat.readLine();
                    if(chat == null)
                    System.out.println("hey");
                    System.out.println(ss1);

                    try 
                    {
                            doc1 = textpane.getStyledDocument();

                        doc1.insertString(doc1.getLength(), ss1 + newline,doc1.getStyle(ss));

                        String text=doc1.getText(start, end-start);

                                        int i=text.indexOf(":)");
                        int j=text.indexOf(":(");

                        int k = text.indexOf(":O");

                        int l = text.indexOf(":D");

                        int m = text.indexOf(":P");

                        int n = text.indexOf(";)");

                        while(i>=0) 
                        {
                                                final SimpleAttributeSet attrs=new SimpleAttributeSet(doc1.getCharacterElement(start+i).getAttributes());

                            if (StyleConstants.getIcon(attrs)==null)
                            {
                                                    StyleConstants.setIcon(attrs, icon1);
                                                    doc1.remove(start+i, 2);
                                                    doc1.insertString(start+i,":)", attrs);
                                                }

                            i=text.indexOf(":)", i+2);
                                        }

                        while(j>=0) 
                        {
                                            final SimpleAttributeSet attrs=new SimpleAttributeSet(doc1.getCharacterElement(start+j).getAttributes());

                        if (StyleConstants.getIcon(attrs)==null)
                        {
                                                StyleConstants.setIcon(attrs, icon2);
                                                doc1.remove(start+j, 2);
                                                doc1.insertString(start+j,":(", attrs);
                                            }

                    j=text.indexOf(":(", j+2);
                                    }

                    while(k>=0) 
                    {
                                            final SimpleAttributeSet attrs=new SimpleAttributeSet(doc1.getCharacterElement(start+k).getAttributes());

                        if (StyleConstants.getIcon(attrs)==null)
                        {
                                                StyleConstants.setIcon(attrs, icon3);
                                                doc1.remove(start+k, 2);
                                                doc1.insertString(start+k,":O", attrs);
                                            }

                    k=text.indexOf(":O", k+2);
                                    }

                    while(l>=0) 
                    {
                                            final SimpleAttributeSet attrs=new SimpleAttributeSet(doc1.getCharacterElement(start+l).getAttributes());

                        if (StyleConstants.getIcon(attrs)==null)
                        {
                                                StyleConstants.setIcon(attrs, icon4);
                                                doc1.remove(start+l, 2);
                                                doc1.insertString(start+l,":D", attrs);
                                            }

                    l=text.indexOf(":D", l+2);
                                    }

                    while(m>=0) 
                    {
                                            final SimpleAttributeSet attrs=new SimpleAttributeSet(doc1.getCharacterElement(start+m).getAttributes());

                        if (StyleConstants.getIcon(attrs)==null)
                        {
                                                StyleConstants.setIcon(attrs, icon5);
                                                doc1.remove(start+m, 2);
                                                doc1.insertString(start+m,":P", attrs);
                                            }

                    m=text.indexOf(":P", m+2);
                                    }   

                    while(n>=0) 
                    {
                                            final SimpleAttributeSet attrs=new SimpleAttributeSet(doc1.getCharacterElement(start+n).getAttributes());

                        if (StyleConstants.getIcon(attrs)==null)
                        {
                                                StyleConstants.setIcon(attrs, icon6);
                                                doc1.remove(start+n, 2);
                                                doc1.insertString(start+n,":P", attrs);
                                            }

                    n=text.indexOf(":P", n+2);
                                    }   


                    }
                    catch (BadLocationException ble)
                    {
                            System.err.println("Couldn't insert text into text pane.");
                    }


                }
            }

            catch(Exception e)
            {
                System.out.println(e + "Something bad happened.");
            }


    }
    public static void main(String args[])
    {
        try
        {



            SwingUtilities.invokeLater(new Runnable()
            {
                        public void run()
                {
                    Swing16.makeGUI();

                }
            }
            );




        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

Я предполагаю, что у вас есть проблема с параллелизмом, что вы не выполняете подключение к сокету и связь в потоке, который является фоном для основного потока Swing, EDT, но это только предположение без дополнительной информации и код. Я предлагаю вам прочитать Параллельность в Swing в руководствах по Oracle Java. Хорошо сделанный объект SwingWorker мог бы хорошо работать здесь.

Редактировать 1:
Некоторые проблемы, которые я вижу с вашим кодом:

  • В вашем коде не должно быть статических полей, а должны быть нестатические переменные экземпляра.
  • В вашем коде не должно быть статических методов, кроме основного, который должен создать 1 или несколько экземпляров, а затем вызывать соответствующие методы в этих экземплярах.
  • Вы должны разбить этот бог-класс на несколько меньших классов, чтобы вы могли делиться и побеждать. Это значительно облегчает отладку, а также позволяет анализировать ваш код.
  • Вы вызываете метод Swing15 во внутреннем классе connectthread. Это типографская ошибка?
  • Вы говорите, что у вас есть исключение NullPointerException. Какая строка бросает это? Кстати, вы не должны пытаться поймать NullPointerExceptions. Вы найдете их и устраните проблему, которая их вызывает. Избавьтесь от этой попытки / поймать.
  • Учитывая все эти статические методы и поля, держу пари, что вы переходите на Java с другого языка программирования, отличного от ООП. Я настоятельно призываю вас приобрести несколько книг по программированию ООП на Java, так как это вам очень поможет.
2 голосов
/ 10 мая 2011

Я полагаю, что ваш Socket слушает - и тем самым блокирует ваше приложение, поэтому новые JFrame не создаются.

Я бы порекомендовал вам запустить Akka Actor (Java) и установить соединение Socket внутри актера. Когда актер получает сообщения, вы публикуете их в ветке рассылки событий, используя SwingUtilities.invokeLater().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...