Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-08-2003, 19:44   #1
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
Socket,java e JTextArea...

sto imparando a usare i socket con java e vorrei poter stampare in una JTextArea i comandi che mi invia il server però ogni volta che il server mi invia un comando mi si riapre una JTextArea mentre io vorrei che mi rimanesse aperta sempre la stessa e che i messaggi si accodassero uno dietro l'altro...ecco il codice del mio programma
Codice:
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
public class irc {
    public static void main(String[] args) {


String pong="",pon="",comandi="",prova="";
char po[];

po = new char[9];
        Socket smtpSocket = null;
        PrintStream os = null;
        DataInputStream is = null;
        JTextArea outputarea = new JTextArea(30,30);


     try {

            smtpSocket = new Socket("irc.tin.it", 6667);
            os = new PrintStream(smtpSocket.getOutputStream());
            is = new DataInputStream(smtpSocket.getInputStream());

        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: hostname");
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: hostname");
        }


 if (smtpSocket != null && os != null && is != null) {
            try {


   os.println("user user hostname ip :user");
   os.println("nick guest1");

   pong = is.readLine();
   pong.getChars(5,13,po,0);
   for (int i=0;i<9;i++)
    pon += po[i];
            System.out.println("pong="+pon);
            System.out.println(pong);
            os.println("pong "+pon);

    String responseLine;
        while ((responseLine = is.readLine()) != null) {
           System.out.println("Server: " + responseLine);
           prova += responseLine;
          outputarea.append(responseLine);
           JOptionPane.showMessageDialog(null,outputarea,"messaggio",
           JOptionPane.INFORMATION_MESSAGE);
             if (responseLine.indexOf("Ok") != -1) {
             break;
         }

    }
            os.close();
            is.close();
            smtpSocket.close();
            } catch (UnknownHostException e) {
                System.err.println("Trying to connect to unknown host: " + e);
            } catch (IOException e) {
                System.err.println("IOException:  " + e);
            }
        }
    }
}
help me please!

Ultima modifica di SteR9 : 23-08-2003 alle 19:47.
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 23-08-2003, 20:27   #2
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
E' sufficiente eliminare l'uso di JOptionPane e sostituirlo con una finestra, sempre visibile, a cui connetti la JTextArea:

Ad esempio:

Codice:
public static void main(String[] a) {
  JFrame frame=new JFrame("Titolo");
  frame.getContentPane().add(outputarea);
  //la riga seguente è una funzione standard da sostituire
  //con una chiusura dell'applicazione più consona
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(500,500);
  frame.show();

  ecc.  ecc.
Puoi eliminare direttamente la chiamata a "showMessageDialog"

Codice:
JOptionPane.showMessageDialog(null,outputarea,"messaggio",
JOptionPane.INFORMATION_MESSAGE);
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 23-08-2003, 20:48   #3
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
Quote:
Originariamente inviato da PGI

non ho ancora studiato il jframe quindi basta che aggiungo ?
Codice:
public static void main(String[] a) {
  JFrame frame=new JFrame("Titolo");
  frame.getContentPane().add(outputarea);
  //la riga seguente è una funzione standard da sostituire
  //con una chiusura dell'applicazione più consona
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(500,500);
  frame.show();
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 23-08-2003, 21:23   #4
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
ok sono riuscito...e se ora volessi inviare un comando al server??
dovrei usare un action listener?
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 23-08-2003, 22:01   #5
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
E' più lungo a dirsi che a farsi:

ti serve un'area di testo o un campo, a seconda che tu voglia inviare una o più linee di testo insieme. Poi imposti il layout del JFrame in modo che il componente di testo venga visualizzato con un minimo di coerenza:
Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
...

class...
...
static JTextField testoOut=new JTextField();
...
public static void main(String[] a) {
 JFrame frame=new JFrame("Titolo");
 JTextArea outputArea=new JTextArea();
 frame.getContentPane().setLayout(new BorderLayout());
 frame.getContentPane().add(testoOut, BorderLayout.SOUTH);
 frame.getContentPane().add(outputArea, BorderLayout.CENTER);
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 frame.setSize(400,400);
 frame.show();
...ecc...
Ora hai una finestra per "invio e ricezione";

Aggiungi a "testoOut" un gestore di eventi che reagisca alla pressione del tasto "enter" (il metodo più intuitivo per l'invio di testo da componenti a linea singola):
Codice:
testoOut.addKeyListener(new KeyAdapter() {
  public void keyPressed(KeyEvent ke) {
    if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
      inviaTestoAlServer();
    }
  }
});
"inviaTestoAlServer()" è un metodo che dovresti creare, il cui scopo è inviare testo sullo stream "os".

Codice:
 static void inviaTestoAlServer() {
   os.println(testoOut.getText());
 }
Ho scritto "al volo" ma dovrebbe essere tutto. In caso sono qui (magari tardi ma rispondo )
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 06:46   #6
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
mi da questo errore nella funzione keyPressed
identifier> expected
testoOut.addKeyListener(new KeyAdapter() {

Ultima modifica di SteR9 : 24-08-2003 alle 07:05.
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:00   #7
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
controlla la successione di parentesi e la presenza di un punto e virgola al termine della settima linea.

Il codice seguente è corretto :

Codice:
    testoOut.addKeyListener(new KeyAdapter() {
      public void keyPressed(KeyEvent ke) {
        if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
          //
        }
      }
    });
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:02   #8
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
posto il codice che facciamo prima...

Codice:
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
public class irc extends Frame implements KeyListener{

 testoOut.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent ke) {
      if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
        inviaTestoAlServer();
      }
    }
  });
    static void inviaTestoAlServer() {
    os.println(testoOut.getText());
    }

public static void main(String[] args){

  JTextField testoOut=new JTextField();
  JTextArea outputarea = new JTextArea();
  JFrame frame=new JFrame("Titolo");
  frame.getContentPane().add(outputarea);
  frame.getContentPane().add(testoOut, BorderLayout.SOUTH);
  //la riga seguente è una funzione standard da sostituire
  //con una chiusura dell'applicazione più consona
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(500,500);
  frame.show();
  String pong="",pon="",comandi="",prova="";
  char po[];

  po = new char[9];
        Socket smtpSocket = null;
        PrintStream os = null;
        DataInputStream is = null;



     try {

            smtpSocket = new Socket("irc.dal.net", 6667);
            os = new PrintStream(smtpSocket.getOutputStream());
            is = new DataInputStream(smtpSocket.getInputStream());

        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: hostname");
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: hostname");
        }


 if (smtpSocket != null && os != null && is != null) {
            try {


   os.println("user user hostname ip :user");
   os.println("nick guest2993");

   pong = is.readLine();
   pong.getChars(5,13,po,0);
   for (int i=0;i<9;i++)
    pon += po[i];
            System.out.println("pong="+pon);
            System.out.println(pong);
            os.println("pong "+pon);

    String responseLine;
        while ((responseLine = is.readLine()) != null) {
           System.out.println("Server: " + responseLine);
           prova += responseLine;
          outputarea.append(responseLine + "\n");
             if (responseLine.indexOf("Ok") != -1) {
             break;
         }

    }
            os.close();
            is.close();
            smtpSocket.close();
            } catch (UnknownHostException e) {
                System.err.println("Trying to connect to unknown host: " + e);
            } catch (IOException e) {
                System.err.println("IOException:  " + e);
            }
        }
    }

}
grazie
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:14   #9
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Bel macello

All'esterno di un metodo in Java puoi inizializzare variabili ma non usare gli oggetti inizializzati.

testoOut.addKeyListener(...)

va a finire nel main.

Non è necessario che "irc" estenda Frame né che implementi KeyListener. O meglio, sarebbe il modo più "Java-style" di costruire l'applicazione, ma devi rimaneggiare ampiamente il codice per portarlo su quella strada.

PrintStream os = null; dovrebbe diventare

static PrintStream os= null;

e finire in un'area di visibilità di classe (quella in cui al momento si trova testoOut.addKeyListener(...) )

Così dovrebbe "andare"
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:21   #10
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
mmm non ho ben capito cosa devo fare....
in pratica lui non riconosce testoOut??
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:25   #11
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Non solo, anche se avessi dichiarato la variabile testoout "prima" comunque non avresti potuto attaccargli un keyListener.

Se mi dai 5 minuti ti sposto le linee di codice che andrebbero spostate e le evidenzio in grassetto, così tagliamo la testa al toro
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:35   #12
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Così dovrebbe compilare correttamente. Dovrebbe anche funzionare.

Codice:
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
public class temp /*extends Frame implements KeyListener*/{

/* testoOut.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent ke) {
      if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
        inviaTestoAlServer();
      }
    }
  });*/
  
  static JTextField testoOut = new JTextField();
  
  static PrintStream os = null;
  
  static void inviaTestoAlServer() {
    if(os!=null) {
    	os.println(testoOut.getText());
    }
  }

public static void main(String[] args){

  //JTextField testoOut=new JTextField();
  
  //******************************************
	testoOut.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent ke) {
      if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
        inviaTestoAlServer();
      }
    }
  });  
  //******************************************
  
  JTextArea outputarea = new JTextArea();
  JFrame frame=new JFrame("Titolo");
  frame.getContentPane().add(outputarea);
  frame.getContentPane().add(testoOut, BorderLayout.SOUTH);
  //la riga seguente è una funzione standard da sostituire
  //con una chiusura dell'applicazione più consona
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(500,500);
  frame.show();
  String pong="",pon="",comandi="",prova="";
  char po[];

  po = new char[9];
        Socket smtpSocket = null;
        /*PrintStream os = null;*/
        DataInputStream is = null;



     try {

            smtpSocket = new Socket("irc.dal.net", 6667);
            os = new PrintStream(smtpSocket.getOutputStream());
            is = new DataInputStream(smtpSocket.getInputStream());

        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: hostname");
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: hostname");
        }


 if (smtpSocket != null && os != null && is != null) {
            try {


   os.println("user user hostname ip :user");
   os.println("nick guest2993");

   pong = is.readLine();
   pong.getChars(5,13,po,0);
   for (int i=0;i<9;i++)
    pon += po[i];
            System.out.println("pong="+pon);
            System.out.println(pong);
            os.println("pong "+pon);

    String responseLine;
        while ((responseLine = is.readLine()) != null) {
           System.out.println("Server: " + responseLine);
           prova += responseLine;
          outputarea.append(responseLine + "\n");
             if (responseLine.indexOf("Ok") != -1) {
             break;
         }

    }
            os.close();
            is.close();
            smtpSocket.close();
            } catch (UnknownHostException e) {
                System.err.println("Trying to connect to unknown host: " + e);
            } catch (IOException e) {
                System.err.println("IOException:  " + e);
            }
        }
    }

}
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:42   #13
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Ho dimenticato una linea.

E' meglio che la linea di testo presente nel JTextField venga resettata dopo l'invio...a dire il vero è l'unico modo per inviare più comandi

Codice:
  static void inviaTestoAlServer() {
    if(os!=null) {
    	os.println(testoOut.getText());
        testoOut.setText("");
    }
  }
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 14:01   #14
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
funziona alla grande,ti ringrazio!
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 14:38   #15
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
e se volessi aggiungere uno scroller??che funzione devo usare??
perchè quando il testo diventa lungo sparisce...
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 15:36   #16
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
La semplicità delle librerie Java ci viene in aiuto.

Occorre usare un "JScrollPane"

cambia questa riga

frame.getContentPane().add(outputarea);

con queste due

JScrollPane scroller=new JScrollPane(outputarea);
frame.getContentPane().add(scroller);

e il gioco è fatto.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 16:00   #17
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
Quote:
Originariamente inviato da PGI
La semplicità delle librerie Java ci viene in aiuto.

Occorre usare un "JScrollPane"

cambia questa riga

frame.getContentPane().add(outputarea);

con queste due

JScrollPane scroller=new JScrollPane(outputarea);
frame.getContentPane().add(scroller);

e il gioco è fatto.
perfetto però non scende automaticamente...non si può far si che scenda automaticamente ogni nuova linea?
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 16:10   #18
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Quote:
Originariamente inviato da SteR9
perfetto però non scende automaticamente...non si può far si che scenda automaticamente ogni nuova linea?
Tutto si può fare!

Devi impostare la posizione del cursore nell'area di testo usando come indice la lunghezza del testo contenuto nell'area.

dopo la linea

outputarea.append(responseLine + "\n");


aggiungi questa

outputarea.setCaretPosition(outputarea.getText().length());
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 17:03   #19
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
visto che sto tentando di creare un client irc ora vorrei poter scrivere in un altro JFrame ciò che viene scritto nel canale,mi è abbastanza chiaro come fare,ma non ho ben chiaro come "estrarre" solo ciò che viene scritto nel canale....
non esiste un tutorial sulla creazione di un client??con anche tutti i comandi che può ricevere un server irc...
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 17:08   #20
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Per un tutorial sinceramente non saprei dove indirizzarti. Vediamo se qualcun'altro interviene.
PGI è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Servizi in streaming sempre più c...
Anteprima della Leapmotor B03X: inizia l...
Anthropic accusa la Cina: Claude utilizz...
I satelliti Rassvet (Starlink russo) di ...
Un agente IA ha risolto un problema su W...
Cina: la CMSA potrebbe cambiare parte de...
68 mensilità di bonus per i dipen...
Rocket Lab ha fatto ricorso contro la de...
Nutanix rende disponibile Azure Virtual ...
Il padrino del deep learning avverte: gl...
Il finto avviso "iPhone Storage is Full"...
Dietrofront in Cina, addio touchscreen p...
Un piccolo accessorio trasforma lo smart...
Dopo 370 anni il Cyphral Distich non è p...
Oppo Find X10, X10 Pro Max e X10 E: conf...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:58.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v