Re: Class Cast Exception

"Brobbey,Isaac" wrote:
> 
>  i still have not fix the PickManipulationRendererJ3D but i think i am
> getting close to solving it except that i get an error message at runtime
> even though it compiles alright; the error says
> 
> "Exception in thread "main" java.lang.ClassCastException: visad.Real
>         at Spikesxxx.main(Spikesxxx.java:90)"
> 
> which is on this line
> 
> RealTuple coords = (RealTuple) field.getSample(0);

The Exception occurs because the range values of your
Field are Reals rather than RealTuples. You should be
able to figure this out for yourself by:

  Data range = field.getSample(0);
  System.out.println("range = " + range);

> is there any reason why i cannot return a tuple from the field ? knowing
> very well i have declared the tuple earlier.

It all depends on how you construct your Field. The range
values of Fields can have any MathType.

> so far, i can sucessfully retrieve the domain values, but not the range
> values.the range values comes from the array contained in the loop below
> 
> the other thing is also the fact that if i try using the data reference
> "ref" to get or return a tuple it compiles and fails at run time.
> 
> I wonder if getting the component zero from the array contained in the loop
> below can cause such a thing to happen:
> 
> for (int y=0; y<DENSITY * NUM_SPIKES_Y; y++)
>     {
>       for (int x=0; x<DENSITY * NUM_SPIKES_X; x++)
>        {
>         int ndx = y * DENSITY * NUM_SPIKES_X + x;
>         if (x % DENSITY == 0 && y % DENSITY == 0 )
>         {
> 
>             i+=1;
>            // System.out.println(i);
>             Tuple data = (Tuple)fieldx.getSample(i);//next data sample
>             final Real ratiox = (Real) data.getComponent(0);
>             ratioxValues[i] = ratiox.getValue();
>               samples[0][ndx] = ratioxValues[i];//put a spike here
>         }
>         else samples[0][ndx] =-30*Math.random();
> 
>         }
> if i try using data reference "ref" to get the tuple like :
> 
> RealTuple coords = (RealTuple) ref.getData();
> 
> whiles in cellImpl,i get the almost the same error that says
> 
>  "java.lang.ClassCastException: visad.FlatField
>         at Spikesxxx$1.doAction(Spikesxxx.java:152)
>         at visad.ActionImpl.run(ActionImpl.java:243)
>         at visad.util.ThreadPool$ThreadMinnow.run(ThreadPool.java:95)"

Again, the Data in a DataReference can have any MathType. You
get this Exception because the Data object is a FlatField and
you are trying to cast it as a RealTuple.

Bill