Προς το περιεχόμενο

Πρόβλημα με getParameter σε java


kaiser

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα,

Προσπαθώ να φτιάξω ένα 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

Ευπρόσδεκτη κάθε υπόδειξη

Ευχαριστώ

Δημοσ.

Απάντηση: int style = Integer.parseInt(getParameter("mystyle"));

 

Προσπάθησε να αρχίσεις να καταλαβαίνεις τι γράφεις ;).

 

Γράφεις :

 

int style = getParameter("mystyle");//Πως θα γίνει αυτό αφού η getParameter επιστρέφει string?

 

int style = Integer.parseInt("mystyle");//Ζητάς από την JVM να μετατρέψει το string "mystyle" σε αριθμό που φυσικά δεν γίνεται και θα σου πετάξει Runtime error και συγκεκριμένα NumberFormatException.

Δημοσ.

Καλησπέρα και ευχαριστώ για τις υποδείξεις τώρα κατάλαβα τι περίπου γίνεται...

 

Έχω όμως και άλλη μια απορία σχετικά με το πέρασμα παραμέτρων στο applet και ποιό συγκεκριμένα πως μπορώ στο παραπάνω πράδειγμα στο .html αρχείο να ορίζω εγώ τις τιμές που θα έχει ας πούμε το μέγεθος της γραμματοσειράς να είναι π.χ. 50 το χρώμα προσκηνίου να είναι πορτοκαλί κ.λπ.

Δημοσ.

Μπερδεύτηκα τώρα λίγο να σου πω την αλήθεια.

Θέλεις να θέσεις το background της σελίδας ή το background του Applet?

Γιατί αν θέλεις του Applet τότε από ότι βλέπω το έχεις ήδη ορίσει.

Εκτός αν το ερώτημα είναι πως να θέσεις ως background την τιμή που έχεις ήδη ορίσει.

Δημοσ.

Λογικό,εδώ έχω μπερδευτεί εγω....

 

Πιο αναλυτικά λοιπόν,σε κάποιο σημείο του κώδικα γράφω g.setBackground(Color.blue); και θέλω τώρα εγώ,το χρώμα του background όταν τρέχω το .html αρχείο να είναι μπλε(ή κάποιο άλλο που να το ορίζω εγώ το μπλε είναι ανδεικτικό).Ποιό πάνω έχω ορίσει τη μεταβλητή foreg τύπου String και με τον τρόπο που μου είπες μετατρέπω το output σε integer.Θέλω να χρησιμοποιήσω την μεταβλητή αυτή στο .html αρχείο ώστε να περνάω τιμές που θέλω εγώ χωρίς κάθε φορά να αλλάζω τον κώδικα του applet.

Εν ολίγοις δηλαδή αυτό που προσπαθώ να κάνω συνολικά είναι να περνάω παραμέτρους στο applet χωρίς να μεταγλωττίζω συνέχεια τον κώδικα αλλά μέσω του .html αρχείου, οπότε το ερώτημα μου είναι: χρησιμοποιώ σωστό τρόπο ή τα έχω κάνει μαντάρα??

 

P.S. οι τιμές που βλέπεις στο .html αρχείο είναι ενδεικτικές

P.S.2 Ελπίζω να απάντησα σε κάποιο απο τα παραπάνω ερωτήματά σου

Δημοσ.

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 δεν είναι σχεδόν ποτέ καλό.

 

Ελπίζω να σου απάντησα στο ερώτημά σου, και να ήμουν κατανοητός.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...