απορια σε java

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
User avatar
tsilochr
Wow! Terabyte level
Wow! Terabyte level
Posts: 3246
Joined: Tue Mar 16, 2004 2:47 pm
Academic status: PhD
Gender:
Location: mm.aueb.gr
Contact:

Re: απορια σε java

Post by tsilochr » Thu Dec 31, 2009 5:18 pm

α, κάνε και το γράψιμο με synchronized setter και σωστά λέει ο zif, συγχρόνισε και τα 2 νήματα
User avatar
~~Wind~~
Gbyte level
Gbyte level
Posts: 1747
Joined: Thu Nov 30, 2006 1:07 am
Academic status: N>4
Gender:
Location: *void

Re: απορια σε java

Post by ~~Wind~~ » Thu Dec 31, 2009 5:19 pm

:-D

Το synchronized δεν αναφέρεται στον κόσμο όλο, αλλά στο ίδιο το αντικείμενο. Δε σημαίνει ότι επειδή η getStr() είναι synchronized θα επιστρέφει πάντα κάτι non-null ή ότι περιμένει πρώτα την run() ή οτιδήποτε τέτοιο. Η synchronized βάζει μια σειρά στην εκτέλεση των thread. Με άλλα λόγια αν είχες δύο μεθόδους synchronized που η μία έκανε str = "foo"; και η άλλη str = "bar"; τότε όταν θα καλούσες και τις δύο μαζί, πρώτα θα εκτελούνταν η μία και μετά η άλλη, και η εκτέλεση θα ήταν ομαλή, πρώτα τελειώνει η μία μέθοδος την δουλειά της, μετά αρχίζει η δεύτερη μέθοδος την δουλειά της, κι αφού τελειώσει και η δεύτερη συνεχίζονται ότι άλλες ενέργειες έχουν προγραμματιστεί να γίνουν πάνω στο αντικείμενο.

Δοκίμασε να βάλεις ένα delay πριν το System.out , System.sleep(<ms>) αν θυμάμαι καλά και λογικά θα βγει το "Etoimo to thread" στο 1ο output. Κι αν γίνει αυτό ξέρεις ότι είναι σίγουρα race condition / thread bug!.

Code: Select all

public class TD implements Runnable {
    private String str;

    public TD() {
        super("optinal name of thread");
        str = new String("Etoimo to thread");
    }

    public synchronized String getStr() {
        return str;
    }

    public void run() {
        //str = new String ("Etoimo to thread");
    }
}

public class Main {    
    public static void main(String[] args) {
       TD t = new TD();
       Thread t1 = new Thread(t);
       t1.start();
       System.out.println(t.getStr());
    }
}
ImageImage
Come to foss-aueb ...we have cookies.. yamyam~nomnomnomnomnomnomnomnom
a cookie ~ I will do science to it
User avatar
Theofaman
Mbyte level
Mbyte level
Posts: 984
Joined: Sat Sep 24, 2005 1:07 am
Academic status: Alumnus/a
Gender:
Location: Running from the weak side to the low post

Re: απορια σε java

Post by Theofaman » Thu Dec 31, 2009 5:45 pm

Σας ευχαριστώ όλους, όντως χρειαζόταν να καθυστερήσει κάπως η εκτέλεση του println για να προλάβει να πάρει τιμή η μεταβλητή.
Theo(pame na)fam(e mprizoles)an!
User avatar
tsilochr
Wow! Terabyte level
Wow! Terabyte level
Posts: 3246
Joined: Tue Mar 16, 2004 2:47 pm
Academic status: PhD
Gender:
Location: mm.aueb.gr
Contact:

Re: απορια σε java

Post by tsilochr » Thu Dec 31, 2009 11:19 pm

σχετικά με το synchronized, τα πράγματα είναι λίγο πιο περίπλοκα εξαιτίας του specification της java. Σε γενικές γραμμές το synchronized συμπεριφέρεται όπως λέει ο wind, αλλά όχι πάντα. To βιβλίο που ανέφερα προηγουμένως, καθώς και τα concurrency related tutorial αυτού του κυρίου (http://www.javaspecialists.eu/) έχουν παραδείγματα-corner cases που τα threads στην jvm φαίνεται να μην υπακούουν την λογική αλλά το παράλογο :-)
User avatar
necrofear_13
Wow! Terabyte level
Wow! Terabyte level
Posts: 2141
Joined: Sun Nov 18, 2007 5:32 am
Academic status: Alumnus/a
Gender:
Location: ΗΡΑΚΛΕΙΟ ΑΤΤΙΚΗΣ

Re: απορια σε java

Post by necrofear_13 » Tue Apr 13, 2010 10:23 am

Γεια σας παιδιά μια απορία να κάνω και εγώ. Χρησιμοποιώ ένα framework για κάτι σε java. Αυτό το framework ουσιαστικά υλοποιεί κάποια components τα οποία τα περνάω σε κάποιο frame και κάνω την δουλειά μου. Τώρα έχω πρόβλημα με κάτι που γίνεται με το δεξί κλικ. Έχω καταφέρει να απομονώσω τον moulistener που είναι υπεύθυνος για αυτή την "δυσλειτουργία"(έχει μέθοδο getMouseListener το component το συγκεκριμενο) και το πρόβλημα μου είναι το εξής.
Ο συγκεκριμένος mouselistener κάνει κάποια πράγματα για το δεξί κλικ και κάποια πράγματα για το αριστερό κλικ. Θέλω να παραμείνουν οι λειτουργίες του αριστερού κλικ και να πάψουν οι λειτουργίες του αριστερού.
Υ.Σ. έχοντας τον mouselistener οι μόνες μέθοδοι που μπορώ να προσπελάσω είναι οι mousclicked , mousepressed κλπκλπ. Όποια βοήθεια θα ήταν καλοδεχούμενη!!!
No matter what kind of sadness envelops the darkness of our despair, if you put one foot in front of the other, at some point you will reach a place where you can see the light.

In heaven or earth, no matter to where we progress, no matter where we walk, that becomes our road.
As long as we keep walking the battle will continue.
And that is exactly why this place will always be a paradise
User avatar
cypher
Venus Former Team Member
Posts: 6207
Joined: Mon Sep 29, 2008 9:12 pm
Academic status: Alumnus/a
Gender:

Re: απορια σε java

Post by cypher » Tue Apr 13, 2010 10:33 am

Εχεις προσβαση στις mouseclicked/pressed κτλ οποτε απλα ελεγχεις αν το event στο οποιο αντεδρασε ο listener προηλθε απο δεξι κλικ και αν ναι κανεις return.

Code: Select all

if(e.getButton()==MouseEvent.BUTTON3){  //e ειναι το MouseEvent που παιρνει ως παραμετρο η εκαστοτε συναρτηση.
                     return;
                }else{ do what the left click should do.}
Eκτος αν καταλαβα κατι αλλο απο αυτο που θες. :smt017
ImageImageImageImageImageImageImage
User avatar
necrofear_13
Wow! Terabyte level
Wow! Terabyte level
Posts: 2141
Joined: Sun Nov 18, 2007 5:32 am
Academic status: Alumnus/a
Gender:
Location: ΗΡΑΚΛΕΙΟ ΑΤΤΙΚΗΣ

Re: απορια σε java

Post by necrofear_13 » Tue Apr 13, 2010 11:02 am

H mouseClicked παίρνει σαν όρισμα ενα MouseListener. Δεν μπορώ να ξαναορίσω τη μέθοδο είναι ήδη ορισμένη μέσα στον listener και δεν έχω πρόσβαση. Το θέμα είναι αν μπορώ να την αλλάξω με κάποιο τρόπο έχοντας μόνο την αναφορά του listener
Ουσιαστικα΄το πρόβλημα μου είναι το εξής. Αν έχοντας την αναφορά κάποιου listener (mouse στην συγκεκριμένη μας περίπτωση) εάν μπορώ να αλλάξω τη συμπεριφορά του με κάποιο τρόπο.(ο listener αυτός θα έχει γίνει ήδη register σε κάποιο/α component)
edit: problem solver thanks to tsilocr
Θα ποστάρω λύση αργότερα!!!
No matter what kind of sadness envelops the darkness of our despair, if you put one foot in front of the other, at some point you will reach a place where you can see the light.

In heaven or earth, no matter to where we progress, no matter where we walk, that becomes our road.
As long as we keep walking the battle will continue.
And that is exactly why this place will always be a paradise
User avatar
Zifnab
Venus Former Team Member
Posts: 7581
Joined: Tue Nov 15, 2005 2:42 am
Academic status: MSc
Gender:
Location: Connecticut
Contact:

Re: απορια σε java

Post by Zifnab » Fri Apr 16, 2010 1:36 am

Εγώ θα έκανα extend τον listener και θα τον έκανα reattach επάνω στα components - δεν ξέρω αν αυτό σου είπε ο tsilochr...
User avatar
tsilochr
Wow! Terabyte level
Wow! Terabyte level
Posts: 3246
Joined: Tue Mar 16, 2004 2:47 pm
Academic status: PhD
Gender:
Location: mm.aueb.gr
Contact:

Re: απορια σε java

Post by tsilochr » Fri Apr 16, 2010 4:23 pm

Δεν χρειάζεσαι extend, δεν επεκτείνεις την λειτουργικότητα του component. Ένα wrapper ήθελε που να φιλτράρει τα events
User avatar
S.a.kiss.007
Mbyte level
Mbyte level
Posts: 659
Joined: Wed Nov 28, 2007 2:24 am
Academic status: 4th year
Gender:
Location: Κρήτη (πνευματικά...)
Contact:

Re: απορια σε java

Post by S.a.kiss.007 » Mon Jun 14, 2010 7:37 pm

Έχω ένα Socket με το οποίο στέλνω πακέτα δεδομένων. Ποια είναι η συνθήκη "Περίμενε απάντηση"?
Το

Code: Select all

while (inputstream.available()<packetSize) {}
είναι αρκετό?
User avatar
netharis
Venus Former Team Member
Posts: 1845
Joined: Sun Jul 15, 2007 2:37 pm
Academic status: Alumnus/a
Gender:
Location: Seattle, Washington
Contact:

Re: απορια σε java

Post by netharis » Mon Jun 14, 2010 8:37 pm

S.a.kiss.007 wrote:Έχω ένα Socket με το οποίο στέλνω πακέτα δεδομένων. Ποια είναι η συνθήκη "Περίμενε απάντηση"?
Το

Code: Select all

while (inputstream.available()<packetSize) {}
είναι αρκετό?
Πρέπει να θέσεις το socket σε non-blocking mode. Και να ρυθμίσεις το timeout accordingly.
Επίσης μη κάνεις την εργασία δικτύων σε Java :lol:
Image
Resistance is futile. Join the foss-side now!
"UNIX is very simple, it just needs a genius to understand its simplicity." - Dennis Ritchie
"The things that I want, by Max Payne. A smoke. A whiskey. For the sun to shine. I want to sleep, to forget. To change the past. Unlimited ammo and a license to kill. But right then, more than anything, I wanted her."
User avatar
S.a.kiss.007
Mbyte level
Mbyte level
Posts: 659
Joined: Wed Nov 28, 2007 2:24 am
Academic status: 4th year
Gender:
Location: Κρήτη (πνευματικά...)
Contact:

Re: απορια σε java

Post by S.a.kiss.007 » Mon Jun 14, 2010 11:34 pm

netharis wrote:
S.a.kiss.007 wrote:Έχω ένα Socket με το οποίο στέλνω πακέτα δεδομένων. Ποια είναι η συνθήκη "Περίμενε απάντηση"?
Το

Code: Select all

while (inputstream.available()<packetSize) {}
είναι αρκετό?
Πρέπει να θέσεις το socket σε non-blocking mode. Και να ρυθμίσεις το timeout accordingly.
Ελληνικά? :oops: τι είναι το non-blocking mode? Άσε το timeout, θα το φτιάξω... Απλά μόνο αυτή τη συνθήκη θέλω αν είναι αρκετή:
"Περίμενε απάντηση" -> while (inputstream.available()<packetSize) {}
Λες είναι καλή?
netharis wrote:Επίσης μη κάνεις την εργασία δικτύων σε Java :lol:
:-D Τα παράπονά σου στον ultimate :smt117
User avatar
ultimate_aektzis
Wow! Terabyte level
Wow! Terabyte level
Posts: 6373
Joined: Tue Nov 13, 2007 10:11 pm
Gender:

Re: απορια σε java

Post by ultimate_aektzis » Mon Jun 14, 2010 11:35 pm

Γκουχ, ασε την λασπη.Εγω σου ειπα οτι δεν εχω προβλημα :-p
User avatar
S.a.kiss.007
Mbyte level
Mbyte level
Posts: 659
Joined: Wed Nov 28, 2007 2:24 am
Academic status: 4th year
Gender:
Location: Κρήτη (πνευματικά...)
Contact:

Re: απορια σε java

Post by S.a.kiss.007 » Mon Jun 14, 2010 11:57 pm

ultimate_aektzis wrote:Γκουχ, ασε την λασπη.Εγω σου ειπα οτι δεν εχω προβλημα :-p
post.remove(); :-p
User avatar
netharis
Venus Former Team Member
Posts: 1845
Joined: Sun Jul 15, 2007 2:37 pm
Academic status: Alumnus/a
Gender:
Location: Seattle, Washington
Contact:

Re: απορια σε java

Post by netharis » Tue Jun 15, 2010 12:03 am

S.a.kiss.007 wrote:
netharis wrote:
S.a.kiss.007 wrote:Έχω ένα Socket με το οποίο στέλνω πακέτα δεδομένων. Ποια είναι η συνθήκη "Περίμενε απάντηση"?
Το

Code: Select all

while (inputstream.available()<packetSize) {}
είναι αρκετό?
Πρέπει να θέσεις το socket σε non-blocking mode. Και να ρυθμίσεις το timeout accordingly.
Ελληνικά? :oops: τι είναι το non-blocking mode? Άσε το timeout, θα το φτιάξω... Απλά μόνο αυτή τη συνθήκη θέλω αν είναι αρκετή:
"Περίμενε απάντηση" -> while (inputstream.available()<packetSize) {}
Λες είναι καλή?
Καταρχάς, λες ότι στέλνεις πακέτα (datagrams μάλλον), με ένα DatagramSocket, μάλλον εννοείς λαμβάνεις; H σωστή μέθοδος είναι να κάνεις μία κλήση στη receive(), και να περιμένεις να λάβεις (εάν δεν λάβεις, περίμενε κάποιο SocketTimeoutException κτλ).
Μετά αφού πάρεις το datagram το κάνεις disassemble κ.ο.κ.
To input stream, που το έχεις κάνει bind;
Image
Resistance is futile. Join the foss-side now!
"UNIX is very simple, it just needs a genius to understand its simplicity." - Dennis Ritchie
"The things that I want, by Max Payne. A smoke. A whiskey. For the sun to shine. I want to sleep, to forget. To change the past. Unlimited ammo and a license to kill. But right then, more than anything, I wanted her."
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: απορια σε java

Post by proskopos » Fri Oct 01, 2010 4:13 pm

Θέλω να παίρνω ένα input που να είναι της μορφής:
0 ή 1 παύλα (-), μετά 1 ή και περισσότερα νούμερα, και μετά 0 ή 1 γράμμα,
Διάβασα αυτό και έγραψα το παρακάτω (δυστυχώς δεν έχει παράδειγμα για να καταλάβω καλύτερα):

Code: Select all

    public static String INPUT_PATTERN = "^(-?)([0-9]+)([a-zA-Z]){1}$";
είναι σωστό?
επίσης δεν βλέπω πως μπορώ μετά, να ελέγξω την είσοδο.. πχ:
1)Αμα μπει παύλα στην αρχή κάνε .....
2)Πάρε το νούμερο που θα μπει, όσα ψηφία και να είναι και κάνε.....
3)έλεγξε ποιό γράμμα μπήκε στο τέλος (αν μπήκε).

Καμία ιδέα?
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
enum21
Venus Former Team Member
Posts: 5436
Joined: Mon Feb 16, 2009 9:06 pm
Academic status: Alumnus/a
Gender:
Location: Underworld

Re: απορια σε java

Post by enum21 » Fri Oct 01, 2010 4:22 pm

Αφού θες 0 ή 1 γράμμα δεν πρέπει να είναι [a-zA-Z] με "?" ;
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: απορια σε java

Post by proskopos » Fri Oct 01, 2010 4:25 pm

enum21 wrote:Αφού θες 0 ή 1 γράμμα δεν πρέπει να είναι [a-zA-Z] με "?" ;
Ναι στην αρχή σκεφτόμουν ακριβώς 1.. έστω... ακριβώς 1... :smt023
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: απορια σε java

Post by proskopos » Sat Oct 02, 2010 1:34 pm

Το πρόβλημα μου μεταφέρθηκε αλλού τώρα:

Code: Select all

\
        Scanner in = new Scanner(System.in);
        Pattern Type = Pattern.compile("^([+|-]?)( \\d+(\\.\\d*)? ) ([a-zA-Z]?)$");
        String input = in.nextLine();
        Matcher m = Pattern.matcher(input);
Η μέθοδος matcher ειναι non-static και δεν ορίζεται για static input.
Δεν βρίσκω πουθενά πως μπορώ να κάνω την σύγκριση, για input που δίνει ο χρήστης.. Τι μπορώ να κάνω?
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
sinty
Kilobyte level
Kilobyte level
Posts: 473
Joined: Thu Nov 06, 2008 2:07 pm
Academic status: MSc
Location: wondering...

Re: απορια σε java

Post by sinty » Sat Oct 02, 2010 1:40 pm

proskopos wrote:Το πρόβλημα μου μεταφέρθηκε αλλού τώρα:

Code: Select all

\
        Scanner in = new Scanner(System.in);
        Pattern Type = Pattern.compile("^([+|-]?)( \\d+(\\.\\d*)? ) ([a-zA-Z]?)$");
        String input = in.nextLine();
        Matcher m = Pattern.matcher(input);
Η μέθοδος matcher ειναι non-static και δεν ορίζεται για static input.
Δεν βρίσκω πουθενά πως μπορώ να κάνω την σύγκριση, για input που δίνει ο χρήστης.. Τι μπορώ να κάνω?
Υπάρχει και η μέθοδος matces της StringTokenizer, αλλά δεν ξέρω αν μπορείς να τη χρησιμοποιήσεις όπως θες :oops:
She's lost in the darkness, fading away
I'm still around here, screaming her name
User avatar
Ισοβίτης
Venus Former Team Member
Posts: 1262
Joined: Sat Apr 21, 2007 5:45 pm
Gender:
Location: Πίσω από τα σίδερα
Contact:

Re: απορια σε java

Post by Ισοβίτης » Sat Oct 02, 2010 2:05 pm

Code: Select all

        Scanner in = new Scanner(System.in);
        Pattern type = Pattern.compile("^([+|-]?)( \\d+(\\.\\d*)? ) ([a-zA-Z]?)$");
        String input = in.nextLine();
        Matcher m = type.matcher(input);
Συγχώρα με που δεν καταλαβαίνω τι λένε τα κομπιούτερς κι οι αριθμοί...

Image

Find me: Image Image Image Image Image
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: απορια σε java

Post by proskopos » Sat Oct 02, 2010 2:16 pm

Έυχαριστώ παιδιά.. αλλά σας πρόλαβε ο άνεμος... :)
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
Post Reply

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