2009-07-29 5 views
4

Le code suivant lorsqu'il est exécuté sur certaines machines dans notre société provoque une IllegalArgumentException d'être jeté:Java création couleur lance IllegalArgumentException lorsqu'il est utilisé avec des arguments entiers

Color sludge = new Color(133, 133, 78); 
//throws IAE with message "Color parameter outside of expected range: Red Green Blue" 

Un appel équivalent à l'aide float arguments au lieu fonctionne:

Color sludge = new Color(0.522, 0.522, 0.306); // 133/255 = 0.522, 78/255 = 0.306 

Pourquoi cela pourrait-il être le Cas? Et pourquoi cela affecterait seulement certaines machines?

pourrait-il avoir quelque chose à voir avec le fait que sont définis ces Color objets au printemps comme ceci:

<bean id="sludge" class="java.awt.Color"> 
    <constructor-arg value="133"/> 
    <constructor-arg value="133"/> 
    <constructor-arg value="78"/> 
</bean> 
+0

Je viens d'essayer à la fois le java seulement ainsi que la version de printemps, et travaillent tous les deux pour moi. Je remarque que vous êtes message d'exception est incomplète, il devrait y avoir quelque chose après "gamme attendue". Quelle version de Java utilisez-vous? – skaffman

+0

@skaffman, je vais éditer la question pour compléter le message. – butterchicken

+0

L'IAE peut être lancé sur des valeurs int ou float de test. Pouvez-vous déboguer et attraper l'exception (ou regarder la stacktrace) que ce soit la méthode testColorValueRange (int, int, int, int) ou la méthode testColorValueRange (float, float, float, float) qui lance l'IAE? Bien que je suis assez sûr, que le constructeur 'float-type' est utilisé pour créer la couleur. Toutes les machines utilisent-elles la même version Java? –

Répondre

3

Je ne suis pas un expert du printemps. mais avez-vous essayé de définir le type à int?

<constructor-arg type="int" value="133"> 

?

+0

+1 Je ne sais pas si cela fera une différence, mais j'aime la façon dont vous pensez – skaffman

+0

Et avez-vous essayé d'ajouter un tag ? ? – Pierre

+0

@Pierre - J'étais une cuillère; – butterchicken

4

étant plus pédant:

<bean id="sludge" class="java.awt.Color"> 
    <constructor-arg index="0" type="int"><value>133</value></constructor-arg> 
    <constructor-arg index="1" type="int"><value>133</value></constructor-arg> 
    <constructor-arg index="2" type="int"><value>78</value></constructor-arg> 
</bean> 

EDIT

vérifier aussi this blog post

+2

+1 pour le blog fantastique – butterchicken

+0

Je suis entièrement d'accord, ce blog est à la fois complet et clair. – extraneon

Questions connexes