kaiser Δημοσ. 13 Αυγούστου 2008 Δημοσ. 13 Αυγούστου 2008 Καλησπέρα, Προσπαθώ να φτιάξω ένα Applet σε java το οποίο θα δέχεται κάποιες τιμές τις οποίες θα δηλώνω στο .html αρχείο. Tο πρόβλημα είναι ότι οι μεταβλητές είναι ακεραιοι αριθμοί ενώ το output από την getParameter είναι String. Μήπως γνωρίζει κανείς πως μπορεί να γίνει το string output της getParameter να μετατρέπεται σε Int? Παρακάτω Παραθέτω και τον κώδικα: > import java.awt.Graphics; import java.awt.Font; import java.awt.Color; public class Hello extends java.applet.Applet{ Font f=new Font("ARIAL", Font.ITALIC, 25); String message; int style, size, backg, foreg; public void init(){ style=getParameter("mystyle"); size=getParameter("mysize"); backg=getParameter("backcolor"); foreg=getParameter("forecolor"); message=getParameter("mymessage"); message="Koukou "+message; style=Integer.parseInt("mystyle"); size=Integer.parseInt("mysize"); backg=Integer.parseInt("backcolor"); foreg=Integer.parseInt("forecolor"); } public void paint(Graphics g){ g.setFont(f); g.setColor(Color.PINK); g.setBackground(Color.blue); g.setForeground(Color.yellow); g.drawString(message, 5,50); } } Καθώς επίσης και το .html αρχείο: <HTML> <HEAD> <TITLE>Applet GetParameter</TITLE> </HEAD> <BODY> <APPLET CODE="Hello.class" WIDTH=300 HEIGHT=70 ALIGN= LEFT VSPACE=60 HSPACE 10> <PARAM NAME=mystyle VALUE=2> <PARAM NAME=mysize VALUE=20> <PARAM NAME=mymessage VALUE="Roukou"> <PARAM NAME=backcolor VALUE=0,255,255> <PARAM NAME=forecolor VALUE=0,150,150> </APPLET> </BODY> </HTML> Στον κώδικα java δοκίμασα όπως φαίνεται και με την δήλωση style=Integer.parseInt("mystyle"); και αντίστοιχα για τις υπόλοιπες να μετατρέψω απο string σε int το output αλλά χωρίς αποτέλεσμα.Παρακάτω παραθέτω και τα έξι μυνήματα λάθους που εμφανίζονται κατα το Compile της εφαρμογής. > D:\Javaprogs>javac Hello.java Hello.java:15: incompatible types found : java.lang.String required: int style=getParameter("mystyle"); ^ Hello.java:16: incompatible types found : java.lang.String required: int size=getParameter("mysize"); ^ Hello.java:17: incompatible types found : java.lang.String required: int backg=getParameter("backcolor"); ^ Hello.java:18: incompatible types found : java.lang.String required: int foreg=getParameter("forecolor"); ^ Hello.java:34: cannot find symbol symbol : method setBackground(java.awt.Color) location: class java.awt.Graphics g.setBackground(Color.RED); ^ Hello.java:35: cannot find symbol symbol : method setForeground(java.awt.Color) location: class java.awt.Graphics g.setForeground(Color.YELLOW); ^ 6 errors Ευπρόσδεκτη κάθε υπόδειξη Ευχαριστώ
alex2005 Δημοσ. 13 Αυγούστου 2008 Δημοσ. 13 Αυγούστου 2008 Απάντηση: int style = Integer.parseInt(getParameter("mystyle")); Προσπάθησε να αρχίσεις να καταλαβαίνεις τι γράφεις . Γράφεις : int style = getParameter("mystyle");//Πως θα γίνει αυτό αφού η getParameter επιστρέφει string? int style = Integer.parseInt("mystyle");//Ζητάς από την JVM να μετατρέψει το string "mystyle" σε αριθμό που φυσικά δεν γίνεται και θα σου πετάξει Runtime error και συγκεκριμένα NumberFormatException.
kaiser Δημοσ. 17 Αυγούστου 2008 Μέλος Δημοσ. 17 Αυγούστου 2008 Καλησπέρα και ευχαριστώ για τις υποδείξεις τώρα κατάλαβα τι περίπου γίνεται... Έχω όμως και άλλη μια απορία σχετικά με το πέρασμα παραμέτρων στο applet και ποιό συγκεκριμένα πως μπορώ στο παραπάνω πράδειγμα στο .html αρχείο να ορίζω εγώ τις τιμές που θα έχει ας πούμε το μέγεθος της γραμματοσειράς να είναι π.χ. 50 το χρώμα προσκηνίου να είναι πορτοκαλί κ.λπ.
alex2005 Δημοσ. 17 Αυγούστου 2008 Δημοσ. 17 Αυγούστου 2008 Μπερδεύτηκα τώρα λίγο να σου πω την αλήθεια. Θέλεις να θέσεις το background της σελίδας ή το background του Applet? Γιατί αν θέλεις του Applet τότε από ότι βλέπω το έχεις ήδη ορίσει. Εκτός αν το ερώτημα είναι πως να θέσεις ως background την τιμή που έχεις ήδη ορίσει.
kaiser Δημοσ. 18 Αυγούστου 2008 Μέλος Δημοσ. 18 Αυγούστου 2008 Λογικό,εδώ έχω μπερδευτεί εγω.... Πιο αναλυτικά λοιπόν,σε κάποιο σημείο του κώδικα γράφω g.setBackground(Color.blue); και θέλω τώρα εγώ,το χρώμα του background όταν τρέχω το .html αρχείο να είναι μπλε(ή κάποιο άλλο που να το ορίζω εγώ το μπλε είναι ανδεικτικό).Ποιό πάνω έχω ορίσει τη μεταβλητή foreg τύπου String και με τον τρόπο που μου είπες μετατρέπω το output σε integer.Θέλω να χρησιμοποιήσω την μεταβλητή αυτή στο .html αρχείο ώστε να περνάω τιμές που θέλω εγώ χωρίς κάθε φορά να αλλάζω τον κώδικα του applet. Εν ολίγοις δηλαδή αυτό που προσπαθώ να κάνω συνολικά είναι να περνάω παραμέτρους στο applet χωρίς να μεταγλωττίζω συνέχεια τον κώδικα αλλά μέσω του .html αρχείου, οπότε το ερώτημα μου είναι: χρησιμοποιώ σωστό τρόπο ή τα έχω κάνει μαντάρα?? P.S. οι τιμές που βλέπεις στο .html αρχείο είναι ενδεικτικές P.S.2 Ελπίζω να απάντησα σε κάποιο απο τα παραπάνω ερωτήματά σου
alex2005 Δημοσ. 18 Αυγούστου 2008 Δημοσ. 18 Αυγούστου 2008 OK, ακόμα όμως δεν κατάλαβα αν θέλεις να θέσεις το background του HTML αρχείου ή το background του applet, ελπίζω να καταλαβαίνεις την διαφορά. Μια και αναφέρεις ότι κάνεις g.setbackground(....) τότε υποθέτω ότι θέλεις να θέσεις το background του applet. Θα μπορούσες λοιπόν να κάνεις το εξής: Το πως θα τα ορίσεις στην HTML το αφήνω σε σένα, αλλά μου φαίνεται πως έχεις 2 επιλογές: 1) Να ορίσεις το background όπως ακριβώς το έχεις κάνει μέχρι τώρα δηλαδή στην μορφή "0-255,0-255,0-255", και στο applet να κάνεις. String[] rgb = getParameter("Foreground").split(","); setBackground(new java.awt.Color(Integer.parseInt(rgb[0]),Integer.parseInt(rgb[1]),Integer.parseInt(rgb[2]))); Πρόσεξε ότι δεν έχω κάνει g.setBackground γιατί η τάξη applet έχει setBackground() από μόνη της, δεν χρειάζεται να την καλέσεις στο αντικείμενο graphics. 2) Να ορίσεις 3 διαφορετικές τιμές για R,G,B στο HTML έτσι ώστε να μην χρειαστεί να κάνεις την split όπως στο προηγούμενο παράδειγμα. ------------------------------------------ Το αν αυτό που κάνεις έχει νόημα είναι δικό σου θέμα και δεν μπορώ εγώ να σου πω αν έχει νόημα ή όχι.Έχει και τα πλεονεκτήματα πάντως να το κάνεις με αυτόν τον τρόπο που επιλέγεις, το hard coding δεν είναι σχεδόν ποτέ καλό. Ελπίζω να σου απάντησα στο ερώτημά σου, και να ήμουν κατανοητός.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.