Otwieranie nowego okna

0

Witam wszystkich. Napisałem prostą aplikację typu klient - serwer, która za pośrednictwem serwera przesyła wiadomości od jednego klienta do drugiego. Stworzyłem do aplikacji klienta proste GUI, które działa bez zarzutu. Postanowiłem również dodać formularz z logowaniem, który ma się wyświetlać przed otworzeniem aplikacji (dla uproszczenia przyjmijmy, że formularz nic nie robi poza tym, że po naciśnięciu klawisza "Log in" otwiera okno aplikacji a sam się zamyka). Niestety od dłuższego czasu nie mogę znaleźć przyczyny, która powoduje, że po uruchomieniu programu w ten sposób: (Run file -> aplikacja.java ) program działa, zaś gdy chcę odpalić go za pośrednictwem formularza z logowaniem (Run file -> logowanie.java ) po naciśnięciu klawisza "Log in" aplikacja "aplikacja" otwiera się lecz nie ma pomiędzy nią, a serwerem łączności (tzn. nie są przesyłane wiadomości pomiędzy klientami oraz nie odnotowuję żadnego działania po stronie serwera). Tutaj kod, która otwiera okno aplikacji po kliknięciu klawisza "Log in":

new aplikacja().setVisible(true);
dispose();

Moim zdaniem problem tkwi w wątkach. Proszę o pomoc, może ktoś będzie miał jakieś spostrzeżenia lub cenne uwagi.

0

Podaj więcej szczegółów. Przerobiłem właśnie swój programik dodając mu okno "logowania" z jednym przyciskiem, który uruchamia Klienta i program działa.

0

Trudno jest mi stwierdzić gdzie może być błąd, a wrzucanie całego kodu (zwłaszcza w dużej mierze generowanego przez Netbeans'a jest bez sensu), dlatego wrzucę tylko funkcję main() aplikacji. Jeżeli miałbyś ochotę mogę przesłać całą paczkę z plikami przez PW lub e-mail.
Kod metody main() [klasy InWorker/Outworker - odbieranie/wysyłanie wiadomości]:

public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(testUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(testUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(testUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(testUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new testUI().setVisible(true);
            }
        });
        
Socket socket=null;
ExecutorService exec= Executors.newCachedThreadPool();
ObjectOutputStream oos=null;
ObjectInputStream ois=null;
int port;
String address=null;
String loginB=null;

port=8821;
address="127.0.0.1";
loginB="2";

    try {
		socket=new Socket(address, port);
		oos=new ObjectOutputStream(socket.getOutputStream());
		oos.flush();
		ois=new ObjectInputStream(socket.getInputStream());
	} catch (UnknownHostException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

exec.execute(new OutWorke(socket, oos,loginB));
exec.execute(new InWorke(socket,ois));
        
    }
1

Jak masz wysyłanie w metodzie main(), to nie zadziała. Po takim wywołaniu:

new aplikacja().setVisible(true);

metoda main() klasy aplikacja się nie wykonuje.

0

OOO, racja, wielkie dzięki za pomoc. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1