Βιβλία για Java και συμβουλές γiα Swing

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
papo2
byte level
byte level
Posts: 57
Joined: Fri Dec 16, 2005 9:03 pm
Location: Αθήνα

Post by papo2 » Tue Feb 28, 2006 6:39 pm

Μάλλον δεν το εξήγησα καλά. Αυτό το πρόγραμμα έχει τρια TextFields και εφτά κουμπιά. Όταν πατάς ένα απ' τα έξι κουμπιά το κείμενο που υπάρχει σε κάθε TextFields αποθηκεύεται σε string μεταβλητές. Επίσης υπάρχει και ένα άλλο Frame το οποίο δεν είναι ορατό και έχει κάποιες άδειες Labels μέσα(αυτές που θέλω να γίνεται set το κείμενο απ' τα TextFields). Αφού ολοκληρωθεί η διαδικασία με την αποθήκευση του κειμένου στις μεταβλητές(πατώντας κάποιο απο τα έξι κουμπιά), πατάς το έβδομο και ανοίγει το Frame που έχει μέσα τις Labels που πιο πριν θα έπρεπε να έχει μπει το κείμενο απ' τα TextFields. Λοιπόν αυτές οι Labels συνεχίζουν να μένουν κενές, χωρίς καθόλου κείμενο. Τι μπορεί να φταίει??? :?:
«Η ευτυχία συνήθως έρχεται σε όσους είναι πολύ απασχολημένοι για να ψάξουν να τη βρουν.»

ΧΕΝΡΙ ΝΤΕΪΒΙΝΤ ΤΟΡΟ
User avatar
Einherjar
Venus Project Founder
Venus Project Founder
Posts: 3751
Joined: Tue Jan 27, 2004 4:42 pm
Academic status: Alumnus/a
Gender:
Location: Washington DC, USA
Contact:

Post by Einherjar » Tue Feb 28, 2006 7:36 pm

Έχει πολύ πράμα και δε μπορώ να βγάλω άκρη έτσι όπως το βλέπω εδώ. Δοκίμασε να κάνεις ένα debugging και να δεις τι γίνεται step-by-step στο event handling
[Better to understand a little than to misunderstand a lot]
papo2
byte level
byte level
Posts: 57
Joined: Fri Dec 16, 2005 9:03 pm
Location: Αθήνα

Post by papo2 » Thu Mar 09, 2006 4:03 pm

Γειά σας!!! Λοιπόν έχω μια γενική ερώτηση. Αξίζει κανείς να ασχοληθεί με network programming στη Java ή και γενικότερα; Αν ναι, υπάρχει κανένα καλό εισαγωγικό βιβλίο; :?:
«Η ευτυχία συνήθως έρχεται σε όσους είναι πολύ απασχολημένοι για να ψάξουν να τη βρουν.»

ΧΕΝΡΙ ΝΤΕΪΒΙΝΤ ΤΟΡΟ
User avatar
Einherjar
Venus Project Founder
Venus Project Founder
Posts: 3751
Joined: Tue Jan 27, 2004 4:42 pm
Academic status: Alumnus/a
Gender:
Location: Washington DC, USA
Contact:

Post by Einherjar » Thu Mar 09, 2006 5:22 pm

Αυτός ο τομέας είναι η δύναμη της Java! Για βιβλίο δε ξέρω να σου πω... τα πάντα τα βρίσκω από internet μεριά
[Better to understand a little than to misunderstand a lot]
papo2
byte level
byte level
Posts: 57
Joined: Fri Dec 16, 2005 9:03 pm
Location: Αθήνα

Post by papo2 » Thu Mar 09, 2006 9:27 pm

Ευχαριστώ για την πληροφορία. Τώρα σχετικά με το βιβλίο ξέρει κανείς κάποιο; Εγώ έχω ακούσει ότι το Java Network Programming είναι καλό.
«Η ευτυχία συνήθως έρχεται σε όσους είναι πολύ απασχολημένοι για να ψάξουν να τη βρουν.»

ΧΕΝΡΙ ΝΤΕΪΒΙΝΤ ΤΟΡΟ
User avatar
lumenintervalum
Wow! Terabyte level
Wow! Terabyte level
Posts: 2377
Joined: Thu May 06, 2004 7:06 pm
Location: somewhere far beyond..
Contact:

Post by lumenintervalum » Thu Mar 09, 2006 11:41 pm

κ το Java networking and awt bible έχει καναδυό κεφάλαια μέσα...(δεν έχω εντρυφήσει παραπάνω..)
We are just a moment in time
A blink of an eye
A dream for the blind
Visions from a dying brain
I hope you don't understand
_______________________
scraps& photo gallery στο deviantart- last update 25/08/06
papo2
byte level
byte level
Posts: 57
Joined: Fri Dec 16, 2005 9:03 pm
Location: Αθήνα

Post by papo2 » Wed Apr 26, 2006 1:06 am

Γειά σας και χρόνια πολλά σε όλους! Λοιπόν έχω αρχίσει και ασχολούμαι μεε networking και αντιμετωπίζω ένα πρόβλημα:έχω δύο προγράμματα ,ένα Server και ένα Client. Όταν στέλνω δεδομένα από τον client στο server όλα είναι εντάξει , όταν όμως κάνω το ανάποδο τα δεδομένα δεν εμφαίζονται κατευθείαν στον client.Δηλαδή πρώτα θα πρέπει να στείλει καινούριο μήνυμα ο cliet και μετά θα εμφανιστούν τα δεδομέα που είχε ήδη στείλει ο server. Τι κάνω λάθος;

Server

Code: Select all

import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import javax.swing.*;
import java.net.*;

public class showDatagramServer extends JFrame implements ActionListener
{
private JTextArea ta;
JTextField tf;
private DatagramPacket sendPacket,receivePacket,receivePacket1;
private DatagramSocket socket;

public showDatagramServer()
{
super("Εξυπηρετητής Αυτόνομων πακέτων");
Container cp=getContentPane();
ta=new JTextArea();
tf=new JTextField("");
tf.addActionListener(this);
cp.add(tf, BorderLayout.NORTH);
JScrollPane sc=new JScrollPane(ta);
cp.add(ta, BorderLayout.CENTER);
addWindowListener(new Close_Window());
setSize(400,300);
setVisible(true);

try
{
socket=new DatagramSocket(2000);
}
catch(SocketException se)
{
se.printStackTrace();
System.exit(1);
}
}

public void packetWaiting()
{
while(true)
{
try
{
byte data[]=new byte[100];
receivePacket=new DatagramPacket(data,data.length);
socket.receive(receivePacket);
byte data1[]=new byte[100];
receivePacket1=new DatagramPacket(data1,data1.length);
socket.receive(receivePacket1);
String l= new String(receivePacket.getData());
int in=receivePacket.getLength();
String ll= new String(receivePacket1.getData());
int in1=receivePacket1.getLength();
ta.append("Περιεχόμενα: "+l.substring(0,in)+ " \nSecond Packet: "+ll.substring(0,in1) +receivePacket.getPort());
ta.append("\n\nΕπιστροφή δεδομένων στον πελάτη...");





}
catch(IOException io)
{
	ta.append(io.toString()+"\n");
	io.printStackTrace();
}
}
}
public void actionPerformed(ActionEvent e)
{
    try
    {
    String f=tf.getText();
    byte by[]=f.getBytes();
    sendPacket=new DatagramPacket(by ,by.length,receivePacket.getAddress(),receivePacket.getPort());
socket.send(sendPacket);
ta.append("Πακέτο εστάλη\n");
}
catch(IOException io)
{
	ta.append(io.toString()+"\n");
	io.printStackTrace();
}
}
public static void main(String args[])
{
	showDatagramServer s=new showDatagramServer();
	s.packetWaiting();
}
public class Close_Window extends WindowAdapter
{
	public void windowClosing(WindowEvent e)
	{
		System.exit(0);
	}
}
}
Client

Code: Select all

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

public class showDatagramClient extends JFrame implements ActionListener
{
private JTextArea ta;
private JTextField tf;
JComboBox b;
private DatagramPacket sendPacket,receivePacket,sendPacket1;
private DatagramSocket socket;

public showDatagramClient()
{
super("Πελάτης");
Container cp=getContentPane();
tf=new JTextField("Δώστε μήνυμα");
tf.addActionListener(this);
cp.add(tf, BorderLayout.NORTH);
ta=new JTextArea();
String[] g={"John","James"};
b=new JComboBox(g);
cp.add(b, BorderLayout.SOUTH);
JScrollPane sc=new JScrollPane(ta);
cp.add(ta, BorderLayout.CENTER);
addWindowListener(new Close_Window());
setSize(400,300);
setVisible(true);

try
{
    socket=new DatagramSocket();
   
}
catch(SocketException se)
{
    se.printStackTrace();
    System.exit(1);
}
}

public void packetWaiting()
{
    while(true)
    {
        try
        {
            byte data[]=new byte[100];
            receivePacket=new DatagramPacket(data,data.length);
            socket.receive(receivePacket);
            ta.append("\nΠακέτο ελήφθη:" +"\nαπό τον host:" +receivePacket.getAddress()+"\nθύρα host: " + receivePacket.getPort() +"\nΜήκος: " +receivePacket.getLength() +"\nΠεριεχόμενα:\n\t"+new String(receivePacket.getData()));
     
        }
      catch(IOException ex)
      {
          ta.append(ex.toString()+"\n");
          ex.printStackTrace();
      }
    }
}
public void actionPerformed(ActionEvent e)
{
    try
    {
        String y=(String) b.getSelectedItem();
byte date[]=y.getBytes();
        ta.append("\nΠεριεχόμενο πακέτου αποστολής:"+e.getActionCommand()+"\n");
        String s=e.getActionCommand();
        byte data[]=s.getBytes();
        sendPacket=new DatagramPacket(data,data.length,InetAddress.getLocalHost(),2000);
        socket.send(sendPacket);
        ta.append("Πακέτο απεστάλη\n");
        sendPacket1=new DatagramPacket(date,date.length,InetAddress.getLocalHost(),2000);
socket.send(sendPacket1);
    }
    catch(IOException ex)
    {
        ta.append(ex.toString() + "\n");
        ex.printStackTrace();
    }
}
public static void main(String args[])
{
    showDatagramClient c=new showDatagramClient();
    c.packetWaiting();
}
public class Close_Window extends WindowAdapter
{
	public void windowClosing(WindowEvent e)
	{
		System.exit(0);
	}
}
}
«Η ευτυχία συνήθως έρχεται σε όσους είναι πολύ απασχολημένοι για να ψάξουν να τη βρουν.»

ΧΕΝΡΙ ΝΤΕΪΒΙΝΤ ΤΟΡΟ
User avatar
Einherjar
Venus Project Founder
Venus Project Founder
Posts: 3751
Joined: Tue Jan 27, 2004 4:42 pm
Academic status: Alumnus/a
Gender:
Location: Washington DC, USA
Contact:

Post by Einherjar » Wed Apr 26, 2006 10:39 am

Δε ξέρω αν έχεις χρησιμοποιήσει ποτέ threads αλλά σίγουρα τώρα είναι μια αρκετά καλή στιγμή να το κάνεις. Τα κομμάτια κώδικα που "ακούνε" για πακέτα θα πρέπει να βρίσκονται σε ξεχωριστά threads. Η κλήση receive() του socket μπλοκάρει το πρόγραμμά σου μέχρι να λάβει ένα πακέτο. Αυτό σημαίνει, δεδομένου ότι όλα βρίσκονται σε ένα thread, ότι δε μπορεί να γίνει *τίποτα* άλλο παρά μόνο να ληφθεί ένα μήνυμα για να ξεμπλοκαριστεί.
Εσύ πατάς το κουμπί του server για να σταλεί ένα μήνυμα, έχει όμως ήδη μπλοκαριστεί στην εντολή

Code: Select all

socket.receive(receivePacket);
Έτσι το action μπαίνει σε μια ουρά και θα εξυπηρετηθεί όταν συμβεί κάτι. Αυτό το κάτι είναι τα 2 μηνύματα που στέλνει ο client οπότε βγαίνει από την αναμονή ο server και εξυπηρετεί και το action (στέλνει δηλαδή το μήνυμα στον client).
[Better to understand a little than to misunderstand a lot]
papo2
byte level
byte level
Posts: 57
Joined: Fri Dec 16, 2005 9:03 pm
Location: Αθήνα

Post by papo2 » Wed Apr 26, 2006 1:40 pm

Ευχαριστώ θα προσπαθήσω να το διορθώσω
«Η ευτυχία συνήθως έρχεται σε όσους είναι πολύ απασχολημένοι για να ψάξουν να τη βρουν.»

ΧΕΝΡΙ ΝΤΕΪΒΙΝΤ ΤΟΡΟ
papo2
byte level
byte level
Posts: 57
Joined: Fri Dec 16, 2005 9:03 pm
Location: Αθήνα

Post by papo2 » Wed Apr 26, 2006 3:56 pm

Λοιπόν μετά από αρκετή προσπάθεια μιας και δεν έχω ξαναδουλέψει με threads έκανα ό,τι μπορούσα, όμως ακόμα τα ίδια. Μήπως ξέρει κάποιος τι κάνω λάθος;

Server

Code: Select all

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.SwingUtilities;

public class showDatagramClient extends JFrame implements ActionListener,Runnable
{
private JTextArea ta;
private JTextField tf;

JComboBox b;
private DatagramPacket sendPacket,receivePacket,sendPacket1;
private DatagramSocket socket;
static Thread t,t1;
public showDatagramClient()
{
super("Πελάτης");
Container cp=getContentPane();
tf=new JTextField("Δώστε μήνυμα");
tf.addActionListener(this);
cp.add(tf, BorderLayout.NORTH);
ta=new JTextArea();
String[] g={"John","James"};
b=new JComboBox(g);
cp.add(b, BorderLayout.SOUTH);
JScrollPane sc=new JScrollPane(ta);
cp.add(ta, BorderLayout.CENTER);

setSize(400,300);
setVisible(true);

try
{
    socket=new DatagramSocket();
   
}
catch(SocketException se)
{
    se.printStackTrace();
    System.exit(1);
}
}

public void packetWaiting()
{
    
    while(true)
    {
        try
        {
            byte data[]=new byte[100];
            receivePacket=new DatagramPacket(data,data.length);
            socket.receive(receivePacket);
            ta.append("\nΠακέτο ελήφθη:" +"\nαπό τον host:" +receivePacket.getAddress()+"\nθύρα host: " + receivePacket.getPort() +"\nΜήκος: " +receivePacket.getLength() +"\nΠεριεχόμενα:\n\t"+new String(receivePacket.getData()));
     
        }
      catch(IOException ex)
      {
          ta.append(ex.toString()+"\n");
          ex.printStackTrace();
      }
    }
}
public void run()
    {
   packet();
    packetWaiting();
    
}
public void packet()
{
 
              String y=(String) b.getSelectedItem();
byte date[]=y.getBytes();
        ta.append("\nΠεριεχόμενο πακέτου αποστολής:"+tf.getText()+"\n");
        String s=tf.getText();
        byte data[]=s.getBytes();
        try {
            sendPacket=new DatagramPacket(data,data.length,InetAddress.getLocalHost(),2000);
        } catch (UnknownHostException ex) {
            ex.printStackTrace();
        }
        try {
            socket.send(sendPacket);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        ta.append("Πακέτο απεστάλη\n");
        try {
            sendPacket1=new DatagramPacket(date,date.length,InetAddress.getLocalHost(),2000);
        } catch (UnknownHostException ex) {
            ex.printStackTrace();
        }
        try {            
            socket.send(sendPacket1);
        } catch (IOException ex) {
            ex.printStackTrace();
        }

     }
 
        public void actionPerformed(ActionEvent e)
{
           
    
   packet();
    
        }
public static void main(String args[])
{
    showDatagramClient c=new showDatagramClient();
    c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    c.packetWaiting();
    c.packet();
    t=new Thread();
    t.start();

}
}
Client

Code: Select all

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.SwingUtilities;

public class showDatagramClient extends JFrame implements ActionListener,Runnable
{
private JTextArea ta;
private JTextField tf;

JComboBox b;
private DatagramPacket sendPacket,receivePacket,sendPacket1;
private DatagramSocket socket;
static Thread t,t1;
public showDatagramClient()
{
super("Πελάτης");
Container cp=getContentPane();
tf=new JTextField("Δώστε μήνυμα");
tf.addActionListener(this);
cp.add(tf, BorderLayout.NORTH);
ta=new JTextArea();
String[] g={"John","James"};
b=new JComboBox(g);
cp.add(b, BorderLayout.SOUTH);
JScrollPane sc=new JScrollPane(ta);
cp.add(ta, BorderLayout.CENTER);

setSize(400,300);
setVisible(true);

try
{
    socket=new DatagramSocket();
   
}
catch(SocketException se)
{
    se.printStackTrace();
    System.exit(1);
}
}

public void packetWaiting()
{
    
    while(true)
    {
        try
        {
            byte data[]=new byte[100];
            receivePacket=new DatagramPacket(data,data.length);
            socket.receive(receivePacket);
            ta.append("\nΠακέτο ελήφθη:" +"\nαπό τον host:" +receivePacket.getAddress()+"\nθύρα host: " + receivePacket.getPort() +"\nΜήκος: " +receivePacket.getLength() +"\nΠεριεχόμενα:\n\t"+new String(receivePacket.getData()));
     
        }
      catch(IOException ex)
      {
          ta.append(ex.toString()+"\n");
          ex.printStackTrace();
      }
    }
}
public void run()
    {
   packet();
    packetWaiting();
    
}
public void packet()
{
 
              String y=(String) b.getSelectedItem();
byte date[]=y.getBytes();
        ta.append("\nΠεριεχόμενο πακέτου αποστολής:"+tf.getText()+"\n");
        String s=tf.getText();
        byte data[]=s.getBytes();
        try {
            sendPacket=new DatagramPacket(data,data.length,InetAddress.getLocalHost(),2000);
        } catch (UnknownHostException ex) {
            ex.printStackTrace();
        }
        try {
            socket.send(sendPacket);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        ta.append("Πακέτο απεστάλη\n");
        try {
            sendPacket1=new DatagramPacket(date,date.length,InetAddress.getLocalHost(),2000);
        } catch (UnknownHostException ex) {
            ex.printStackTrace();
        }
        try {            
            socket.send(sendPacket1);
        } catch (IOException ex) {
            ex.printStackTrace();
        }

     }
 
        public void actionPerformed(ActionEvent e)
{
           
    
   packet();
    
        }
public static void main(String args[])
{
    showDatagramClient c=new showDatagramClient();
    c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    c.packetWaiting();
    c.packet();
    t=new Thread();
    t.start();

}
}







«Η ευτυχία συνήθως έρχεται σε όσους είναι πολύ απασχολημένοι για να ψάξουν να τη βρουν.»

ΧΕΝΡΙ ΝΤΕΪΒΙΝΤ ΤΟΡΟ
Post Reply

Return to “Προγραμματισμός”