Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 2 формы авторизации, одна использует прошлые данные 
:(
    Опции темы
fjfalcon
Дата 3.11.2011, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.3.2009

Репутация: нет
Всего: нет



И так у меня есть 2 логин формы(для авторизации на сервере и на внешнем сервисе) 
Обе вызываются функцией bfAsk() и caAsk(); 
Выглядит это так:

Код

String credentials[] = bfAsk(); 

Вызываются они в разное время.
Раньше был этот баг и на первой форме тоже, но я переписал все на jframe и баг исчез. Суть бага:
Когда я первый раз ввожу данные - все четко ,все поля считываются и авторизация на сервере проходит нормально, но когда я делаю ошибку и во второй раз ввожу в форме другие данные - он кидает первые данные. 
Вот классы моих форм:

Работающий нормально класс:
Код

package gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.lang.reflect.InvocationTargetException;
import java.text.DecimalFormat;
import java.util.prefs.Preferences;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.text.NumberFormatter;

public class ClientAuth extends JFrame {
    private static final long serialVersionUID = 1L;
    private JTextField usernameField; // 1
    private JPasswordField passwordField;
    private JTextField serverField;
    private JFormattedTextField portField;
    private JPanel mainPanel = new JPanel();
    private Preferences prefs;
    private JCheckBox CBSave = new JCheckBox("Save");
    private static ClientAuth caAuth;
    private static String result[];
    private static final Object monitor = new Object();

    public ClientAuth() {
        super("Server autorization");
        prefs = Preferences.userNodeForPackage(this.getClass());
        NumberFormatter port = new NumberFormatter();
        DecimalFormat df = new DecimalFormat();
        df.setGroupingUsed(false);
        port.setFormat(df);
        port.setMinimum(1);
        port.setMaximum(65534);

        mainPanel.setLayout(new BorderLayout());
        usernameField = new JTextField(15);
        passwordField = new JPasswordField(15);
        serverField = new JTextField(15);
        portField = new JFormattedTextField(port);
        JButton bLogin = new JButton("Login");
        bLogin.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                String[] s = { caAuth.getUserName(),
                        new String(caAuth.getPassword()), caAuth.getHost(),
                        caAuth.getPort() };
                if (CBSave.isSelected()) {
                    prefs.put("ClLogin", caAuth.getUserName());
                    prefs.put("ClPassword", new String(caAuth.getPassword()));
                    prefs.put("ClServer", caAuth.getHost());
                    prefs.put("ClPort", caAuth.getPort());
                } else {
                    prefs.put("ClLogin", "");
                    prefs.put("ClPassword", "");
                }
                result = s;
                synchronized (monitor) {
                    monitor.notify();
                }
                caAuth.dispose();
            }
        });
        JButton bCancel = new JButton("Cancel");
        bCancel.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                synchronized (monitor) {
                    monitor.notifyAll();
                }
                caAuth.dispose();
            }
        });
        usernameField.setText(prefs.get("ClLogin", ""));
        passwordField.setText(prefs.get("ClPassword", ""));
        serverField.setText(prefs.get("ClServer", "127.0.0.1"));
        portField.setValue(Integer.parseInt(prefs.get("ClPort", "5000")));
        if (!prefs.get("CLLogin", "").equals("")) {
            CBSave.setSelected(true);
        }
        int glGap = 10;
        JPanel labelPanel = new JPanel(new GridLayout(0, 1, 0, glGap));
        JPanel fieldPanel = new JPanel(new GridLayout(0, 1, 0, glGap));
        JPanel centerPanel = new JPanel(new BorderLayout());
        JPanel northPanel = new JPanel(new BorderLayout());
        JPanel southPanel = new JPanel(new FlowLayout());
        JPanel serverPanel = new JPanel();
        JPanel savePanel = new JPanel();
        labelPanel.add(new JLabel("User Name:"));
        labelPanel.add(new JLabel("Password:"));
        fieldPanel.add(usernameField);
        fieldPanel.add(passwordField);
        savePanel.add(CBSave);
        serverPanel.add(new JLabel("Server:"));
        serverPanel.add(serverField);
        serverPanel.add(new JLabel(":"));
        serverPanel.add(portField);
        northPanel.add(labelPanel, BorderLayout.WEST);
        northPanel.add(fieldPanel, BorderLayout.CENTER);
        centerPanel.add(serverPanel, BorderLayout.CENTER);
        centerPanel.add(savePanel, BorderLayout.SOUTH);
        southPanel.add(bLogin);
        southPanel.add(bCancel);
        mainPanel.add(northPanel, BorderLayout.NORTH);
        mainPanel.add(centerPanel, BorderLayout.CENTER);
        mainPanel.add(southPanel, BorderLayout.SOUTH);
        add(mainPanel);
        pack();
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        int w = getSize().width;
        int h = getSize().height;
        int x = (dim.width - w) / 2;
        int y = (dim.height - h) / 2;
        setLocation(x, y);
    }

    protected void processWindowEvent(WindowEvent e) {

        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            synchronized (monitor) {
                caAuth.dispose();
                monitor.notify();
            }

        } else {
            super.processWindowEvent(e);
        }
    }

    public String getUserName() {
        return usernameField.getText();
    }

    public char[] getPassword() {
        return passwordField.getPassword();
    }

    public String getHost() {
        return serverField.getText();
    }

    public String getPort() {
        return portField.getText();
    }

    public JComponent getMainPanel() {
        return mainPanel;
    }

    public static String[] caAsk() {
        caAuth = new ClientAuth();
        ClientAuth.result = null;
        try {
            if (SwingUtilities.isEventDispatchThread()) {
                caAuth.setVisible(true);
            } else {
                EventQueue.invokeAndWait(new Runnable() {

                    public void run() {
                        caAuth.setVisible(true);
                    }
                });
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        synchronized (monitor) {
            try {
                monitor.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return result;
        }
    }
}


Класс работающий с ошибкой:

Код

package gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.lang.reflect.InvocationTargetException;
import java.util.prefs.Preferences;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class BFAuth extends JFrame {
    private static final long serialVersionUID = 1L;
    private JTextField usernameField; // 1
    private JPasswordField passwordField;
    private static JPanel mainPanel = new JPanel();
    private static Preferences prefs;
    private static JCheckBox CBSave = new JCheckBox("Save");
    private static BFAuth bfAuth;
    private static String[] result;
    private static final Object monitor = new Object();

    public BFAuth() {
        super("Service autorization");
        prefs = Preferences.userNodeForPackage(this.getClass());
        mainPanel.setLayout(new BorderLayout());
        usernameField = new JTextField(15);
        passwordField = new JPasswordField(15);

        JButton bLogin = new JButton("Login");
        bLogin.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                System.out.println(bfAuth.getUserName());
                String[] s = { bfAuth.getUserName(),
                        new String(bfAuth.getPassword()), };
                if (CBSave.isSelected()) {
                    prefs.put("BFLogin", bfAuth.getUserName());
                    prefs.put("BFPassword", new String(bfAuth.getPassword()));
                } else {
                    prefs.put("BFLogin", "");
                    prefs.put("BFPassword", "");
                }
                result = s;
                synchronized (monitor) {
                    monitor.notify();
                }
                bfAuth.dispose();
            }
        });
        JButton bCancel = new JButton("Cancel");
        bCancel.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                synchronized (monitor) {
                    monitor.notifyAll();
                }
                bfAuth.dispose();
            }
        });
        usernameField.setText(prefs.get("BFLogin", ""));
        passwordField.setText(prefs.get("BFPassword", ""));
        if (!prefs.get("BFLogin", "").equals("")) {
            CBSave.setSelected(true);
        }
        int glGap = 10;
        JPanel labelPanel = new JPanel(new GridLayout(0, 1, 0, glGap));
        JPanel fieldPanel = new JPanel(new GridLayout(0, 1, 0, glGap));
        JPanel centerPanel = new JPanel(new BorderLayout());
        JPanel northPanel = new JPanel(new BorderLayout());
        JPanel southPanel = new JPanel();
        labelPanel.add(new JLabel("User Name:"));
        labelPanel.add(new JLabel("Password:"));
        fieldPanel.add(usernameField);
        fieldPanel.add(passwordField);
        centerPanel.add(CBSave);
        southPanel.add(bLogin);
        southPanel.add(bCancel);
        northPanel.add(labelPanel, BorderLayout.WEST);
        northPanel.add(fieldPanel, BorderLayout.CENTER);
        mainPanel.add(northPanel, BorderLayout.NORTH);
        mainPanel.add(centerPanel, BorderLayout.CENTER);
        mainPanel.add(southPanel, BorderLayout.SOUTH);
        add(mainPanel);
        pack();
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        int w = getSize().width;
        int h = getSize().height;
        int x = (dim.width - w) / 2;
        int y = (dim.height - h) / 2;
        setLocation(x, y);
    }

    protected void processWindowEvent(WindowEvent e) {

        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            synchronized (monitor) {
                bfAuth.dispose();
                monitor.notify();
            }

        } else {
            super.processWindowEvent(e);
        }
    }

    public String getUserName() {
        return usernameField.getText();
    }

    public char[] getPassword() {
        return passwordField.getPassword();
    }

    public JComponent getMainPanel() {
        return mainPanel;
    }

    public static String[] bfAsk() {
        bfAuth = new BFAuth();
        BFAuth.result = null;
        try {
            if (SwingUtilities.isEventDispatchThread()) {
                bfAuth.setVisible(true);
            } else {
                EventQueue.invokeAndWait(new Runnable() {

                    public void run() {
                        bfAuth.setVisible(true);
                    }
                });
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        synchronized (monitor) {
            try {
                monitor.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return result;
        }
    }
}

PM MAIL   Вверх
Kangaroo
Дата 3.11.2011, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 15
Всего: 104



Так как mainPanel статик, то все окна используют только ее (данные вводятся на старую форму, а считываются с новой). Убери статик, должно помочь:
Код

private JPanel mainPanel = new JPanel();


А вообще нужно код почистить. Например, зачем делать два класса для похожих (одинаковых?) форм авторизации?


--------------------
Lost....
PM MAIL MSN   Вверх
fjfalcon
Дата 3.11.2011, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.3.2009

Репутация: нет
Всего: нет



Вообще уже есть мысли о том, что надо сделать один класс...
Разница только в значениях, которых сохраняются в prefs, в наличии дополнительных панелей и все. 
Не подскажите, как лучше это сделать одним классом? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.