απορια σε java
- tsilochr
- Wow! Terabyte level
- Posts: 3246
- Joined: Tue Mar 16, 2004 2:47 pm
- Academic status: PhD
- Gender: ♂
- Location: mm.aueb.gr
- Contact:
Re: απορια σε java
α, κάνε και το γράψιμο με synchronized setter και σωστά λέει ο zif, συγχρόνισε και τα 2 νήματα
- ~~Wind~~
- Gbyte level
- Posts: 1747
- Joined: Thu Nov 30, 2006 1:07 am
- Academic status: N>4
- Gender: ♂
- Location: *void
Re: απορια σε java
Το 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());
}
}
Come to foss-aueb ...we have cookies.. yamyam~nomnomnomnomnomnomnomnom
a cookie ~ I will do science to it
- Theofaman
- 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
Σας ευχαριστώ όλους, όντως χρειαζόταν να καθυστερήσει κάπως η εκτέλεση του println για να προλάβει να πάρει τιμή η μεταβλητή.
Theo(pame na)fam(e mprizoles)an!
- tsilochr
- Wow! Terabyte level
- Posts: 3246
- Joined: Tue Mar 16, 2004 2:47 pm
- Academic status: PhD
- Gender: ♂
- Location: mm.aueb.gr
- Contact:
Re: απορια σε java
σχετικά με το synchronized, τα πράγματα είναι λίγο πιο περίπλοκα εξαιτίας του specification της java. Σε γενικές γραμμές το synchronized συμπεριφέρεται όπως λέει ο wind, αλλά όχι πάντα. To βιβλίο που ανέφερα προηγουμένως, καθώς και τα concurrency related tutorial αυτού του κυρίου (http://www.javaspecialists.eu/) έχουν παραδείγματα-corner cases που τα threads στην jvm φαίνεται να μην υπακούουν την λογική αλλά το παράλογο
- necrofear_13
- Wow! Terabyte level
- Posts: 2141
- Joined: Sun Nov 18, 2007 5:32 am
- Academic status: Alumnus/a
- Gender: ♂
- Location: ΗΡΑΚΛΕΙΟ ΑΤΤΙΚΗΣ
Re: απορια σε java
Γεια σας παιδιά μια απορία να κάνω και εγώ. Χρησιμοποιώ ένα framework για κάτι σε java. Αυτό το framework ουσιαστικά υλοποιεί κάποια components τα οποία τα περνάω σε κάποιο frame και κάνω την δουλειά μου. Τώρα έχω πρόβλημα με κάτι που γίνεται με το δεξί κλικ. Έχω καταφέρει να απομονώσω τον moulistener που είναι υπεύθυνος για αυτή την "δυσλειτουργία"(έχει μέθοδο getMouseListener το component το συγκεκριμενο) και το πρόβλημα μου είναι το εξής.
Ο συγκεκριμένος mouselistener κάνει κάποια πράγματα για το δεξί κλικ και κάποια πράγματα για το αριστερό κλικ. Θέλω να παραμείνουν οι λειτουργίες του αριστερού κλικ και να πάψουν οι λειτουργίες του αριστερού.
Υ.Σ. έχοντας τον mouselistener οι μόνες μέθοδοι που μπορώ να προσπελάσω είναι οι mousclicked , mousepressed κλπκλπ. Όποια βοήθεια θα ήταν καλοδεχούμενη!!!
Ο συγκεκριμένος 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
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
- cypher
- Venus Former Team Member
- Posts: 6207
- Joined: Mon Sep 29, 2008 9:12 pm
- Academic status: Alumnus/a
- Gender: ♂
Re: απορια σε java
Εχεις προσβαση στις mouseclicked/pressed κτλ οποτε απλα ελεγχεις αν το event στο οποιο αντεδρασε ο listener προηλθε απο δεξι κλικ και αν ναι κανεις return.
Eκτος αν καταλαβα κατι αλλο απο αυτο που θες.
Code: Select all
if(e.getButton()==MouseEvent.BUTTON3){ //e ειναι το MouseEvent που παιρνει ως παραμετρο η εκαστοτε συναρτηση.
return;
}else{ do what the left click should do.}
- necrofear_13
- Wow! Terabyte level
- Posts: 2141
- Joined: Sun Nov 18, 2007 5:32 am
- Academic status: Alumnus/a
- Gender: ♂
- Location: ΗΡΑΚΛΕΙΟ ΑΤΤΙΚΗΣ
Re: απορια σε java
H mouseClicked παίρνει σαν όρισμα ενα MouseListener. Δεν μπορώ να ξαναορίσω τη μέθοδο είναι ήδη ορισμένη μέσα στον listener και δεν έχω πρόσβαση. Το θέμα είναι αν μπορώ να την αλλάξω με κάποιο τρόπο έχοντας μόνο την αναφορά του listener
Ουσιαστικα΄το πρόβλημα μου είναι το εξής. Αν έχοντας την αναφορά κάποιου listener (mouse στην συγκεκριμένη μας περίπτωση) εάν μπορώ να αλλάξω τη συμπεριφορά του με κάποιο τρόπο.(ο listener αυτός θα έχει γίνει ήδη register σε κάποιο/α component)
edit: problem solver thanks to tsilocr
Θα ποστάρω λύση αργότερα!!!
Ουσιαστικα΄το πρόβλημα μου είναι το εξής. Αν έχοντας την αναφορά κάποιου 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
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
- Zifnab
- Venus Former Team Member
- Posts: 7581
- Joined: Tue Nov 15, 2005 2:42 am
- Academic status: MSc
- Gender: ♂
- Location: Connecticut
- Contact:
Re: απορια σε java
Εγώ θα έκανα extend τον listener και θα τον έκανα reattach επάνω στα components - δεν ξέρω αν αυτό σου είπε ο tsilochr...
- tsilochr
- Wow! Terabyte level
- Posts: 3246
- Joined: Tue Mar 16, 2004 2:47 pm
- Academic status: PhD
- Gender: ♂
- Location: mm.aueb.gr
- Contact:
Re: απορια σε java
Δεν χρειάζεσαι extend, δεν επεκτείνεις την λειτουργικότητα του component. Ένα wrapper ήθελε που να φιλτράρει τα events
- S.a.kiss.007
- Mbyte level
- Posts: 659
- Joined: Wed Nov 28, 2007 2:24 am
- Academic status: 4th year
- Gender: ♂
- Location: Κρήτη (πνευματικά...)
- Contact:
Re: απορια σε java
Έχω ένα Socket με το οποίο στέλνω πακέτα δεδομένων. Ποια είναι η συνθήκη "Περίμενε απάντηση"?
Το είναι αρκετό?
Το
Code: Select all
while (inputstream.available()<packetSize) {}
- 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
Πρέπει να θέσεις το socket σε non-blocking mode. Και να ρυθμίσεις το timeout accordingly.S.a.kiss.007 wrote:Έχω ένα Socket με το οποίο στέλνω πακέτα δεδομένων. Ποια είναι η συνθήκη "Περίμενε απάντηση"?
Τοείναι αρκετό?Code: Select all
while (inputstream.available()<packetSize) {}
Επίσης μη κάνεις την εργασία δικτύων σε Java
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."
- S.a.kiss.007
- Mbyte level
- Posts: 659
- Joined: Wed Nov 28, 2007 2:24 am
- Academic status: 4th year
- Gender: ♂
- Location: Κρήτη (πνευματικά...)
- Contact:
Re: απορια σε java
Ελληνικά? τι είναι το non-blocking mode? Άσε το timeout, θα το φτιάξω... Απλά μόνο αυτή τη συνθήκη θέλω αν είναι αρκετή:netharis wrote:Πρέπει να θέσεις το socket σε non-blocking mode. Και να ρυθμίσεις το timeout accordingly.S.a.kiss.007 wrote:Έχω ένα Socket με το οποίο στέλνω πακέτα δεδομένων. Ποια είναι η συνθήκη "Περίμενε απάντηση"?
Τοείναι αρκετό?Code: Select all
while (inputstream.available()<packetSize) {}
"Περίμενε απάντηση" -> while (inputstream.available()<packetSize) {}
Λες είναι καλή?
Τα παράπονά σου στον ultimatenetharis wrote:Επίσης μη κάνεις την εργασία δικτύων σε Java
- ultimate_aektzis
- Wow! Terabyte level
- Posts: 6373
- Joined: Tue Nov 13, 2007 10:11 pm
- Gender: ♂
- S.a.kiss.007
- Mbyte level
- Posts: 659
- Joined: Wed Nov 28, 2007 2:24 am
- Academic status: 4th year
- Gender: ♂
- Location: Κρήτη (πνευματικά...)
- Contact:
Re: απορια σε java
post.remove();ultimate_aektzis wrote:Γκουχ, ασε την λασπη.Εγω σου ειπα οτι δεν εχω προβλημα
- 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
Καταρχάς, λες ότι στέλνεις πακέτα (datagrams μάλλον), με ένα DatagramSocket, μάλλον εννοείς λαμβάνεις; H σωστή μέθοδος είναι να κάνεις μία κλήση στη receive(), και να περιμένεις να λάβεις (εάν δεν λάβεις, περίμενε κάποιο SocketTimeoutException κτλ).S.a.kiss.007 wrote:Ελληνικά? τι είναι το non-blocking mode? Άσε το timeout, θα το φτιάξω... Απλά μόνο αυτή τη συνθήκη θέλω αν είναι αρκετή:netharis wrote:Πρέπει να θέσεις το socket σε non-blocking mode. Και να ρυθμίσεις το timeout accordingly.S.a.kiss.007 wrote:Έχω ένα Socket με το οποίο στέλνω πακέτα δεδομένων. Ποια είναι η συνθήκη "Περίμενε απάντηση"?
Τοείναι αρκετό?Code: Select all
while (inputstream.available()<packetSize) {}
"Περίμενε απάντηση" -> while (inputstream.available()<packetSize) {}
Λες είναι καλή?
Μετά αφού πάρεις το datagram το κάνεις disassemble κ.ο.κ.
To input stream, που το έχεις κάνει bind;
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."
- proskopos
- Wow! Terabyte level
- Posts: 2808
- Joined: Tue Dec 18, 2007 4:01 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Στα φεγγάρια του Πλάνταρ...
- Contact:
Re: απορια σε java
Θέλω να παίρνω ένα input που να είναι της μορφής:
0 ή 1 παύλα (-), μετά 1 ή και περισσότερα νούμερα, και μετά 0 ή 1 γράμμα,
Διάβασα αυτό και έγραψα το παρακάτω (δυστυχώς δεν έχει παράδειγμα για να καταλάβω καλύτερα):
είναι σωστό?
επίσης δεν βλέπω πως μπορώ μετά, να ελέγξω την είσοδο.. πχ:
1)Αμα μπει παύλα στην αρχή κάνε .....
2)Πάρε το νούμερο που θα μπει, όσα ψηφία και να είναι και κάνε.....
3)έλεγξε ποιό γράμμα μπήκε στο τέλος (αν μπήκε).
Καμία ιδέα?
0 ή 1 παύλα (-), μετά 1 ή και περισσότερα νούμερα, και μετά 0 ή 1 γράμμα,
Διάβασα αυτό και έγραψα το παρακάτω (δυστυχώς δεν έχει παράδειγμα για να καταλάβω καλύτερα):
Code: Select all
public static String INPUT_PATTERN = "^(-?)([0-9]+)([a-zA-Z]){1}$";
επίσης δεν βλέπω πως μπορώ μετά, να ελέγξω την είσοδο.. πχ:
1)Αμα μπει παύλα στην αρχή κάνε .....
2)Πάρε το νούμερο που θα μπει, όσα ψηφία και να είναι και κάνε.....
3)έλεγξε ποιό γράμμα μπήκε στο τέλος (αν μπήκε).
Καμία ιδέα?
- enum21
- Venus Former Team Member
- Posts: 5436
- Joined: Mon Feb 16, 2009 9:06 pm
- Academic status: Alumnus/a
- Gender: ♀
- Location: Underworld
Re: απορια σε java
Αφού θες 0 ή 1 γράμμα δεν πρέπει να είναι [a-zA-Z] με "?" ;
- proskopos
- Wow! Terabyte level
- Posts: 2808
- Joined: Tue Dec 18, 2007 4:01 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Στα φεγγάρια του Πλάνταρ...
- Contact:
Re: απορια σε java
Ναι στην αρχή σκεφτόμουν ακριβώς 1.. έστω... ακριβώς 1...enum21 wrote:Αφού θες 0 ή 1 γράμμα δεν πρέπει να είναι [a-zA-Z] με "?" ;
- proskopos
- Wow! Terabyte level
- Posts: 2808
- Joined: Tue Dec 18, 2007 4:01 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Στα φεγγάρια του Πλάνταρ...
- Contact:
Re: απορια σε java
Το πρόβλημα μου μεταφέρθηκε αλλού τώρα:
Η μέθοδος matcher ειναι non-static και δεν ορίζεται για static input.
Δεν βρίσκω πουθενά πως μπορώ να κάνω την σύγκριση, για input που δίνει ο χρήστης.. Τι μπορώ να κάνω?
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);
Δεν βρίσκω πουθενά πως μπορώ να κάνω την σύγκριση, για input που δίνει ο χρήστης.. Τι μπορώ να κάνω?
- sinty
- Kilobyte level
- Posts: 473
- Joined: Thu Nov 06, 2008 2:07 pm
- Academic status: MSc
- Location: wondering...
Re: απορια σε java
Υπάρχει και η μέθοδος matces της StringTokenizer, αλλά δεν ξέρω αν μπορείς να τη χρησιμοποιήσεις όπως θεςproskopos wrote:Το πρόβλημα μου μεταφέρθηκε αλλού τώρα:Η μέθοδος matcher ειναι non-static και δεν ορίζεται για static input.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);
Δεν βρίσκω πουθενά πως μπορώ να κάνω την σύγκριση, για input που δίνει ο χρήστης.. Τι μπορώ να κάνω?
She's lost in the darkness, fading away
I'm still around here, screaming her name
I'm still around here, screaming her name
- Ισοβίτης
- Venus Former Team Member
- Posts: 1262
- Joined: Sat Apr 21, 2007 5:45 pm
- Gender: ♂
- Location: Πίσω από τα σίδερα
- Contact:
Re: απορια σε java
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);
- proskopos
- Wow! Terabyte level
- Posts: 2808
- Joined: Tue Dec 18, 2007 4:01 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Στα φεγγάρια του Πλάνταρ...
- Contact:
Re: απορια σε java
Έυχαριστώ παιδιά.. αλλά σας πρόλαβε ο άνεμος...