Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Eccezione anomala

    ciaop raga, dopo aver eseguito questo codice

    codice:
        try {
          FileSeekableStream stream = new FileSeekableStream(nome);
          RenderedOp img = JAI.create("stream", stream);
          return img;
        }
        catch (IOException e) {
          throw new MEDExceptions(MEDExceptions.IO_IMAGE_ERROR);
        }
    metto la variavile img come attributo all'ìnterno di un altro oggetto Paziente, il quale a sua volta implements Serializable, dopodiché invio l'oggetto da un'applicazione server ad una client, con l'istruzione:

    codice:
       packetOut.writeObject(paziente);
    Il problema è che quando viene eseguita tale istruzione, viene generata l'eccezione:

    codice:
    java.lang.RuntimeException: com.sun.media.jai.codec.FileSeekableStreamNon-serializable parameter in this operation`s ParameterBlock.
    
    at javax.media.jai.OperationNodeSupport.writeObject(OperationNodeSupport.java:754)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:809)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1296)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1332)
    at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:367)
    at javax.media.jai.RenderedOp.writeObject(RenderedOp.java:3015)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:809)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1296)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
    at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1224)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1050)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1332)
    at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:367)
    at java.util.Vector.writeObject(Vector.java:1017)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:809)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1296)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1332)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1304)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
    at ClientServer.GestoreRichiesta.processaRichiesta(GestoreRichiesta.java:60)
    at ClientServer.GestoreRichiesta.run(GestoreRichiesta.java:116)
    Qual'è il problema?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Ma la classe RenderedOp implementa Serializable?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    sì, implementa serializable. Perdipiù abbiamo un altro attributo dello stesso tipo ma caricato in maniera differente, più precisamente così:

    codice:
          RandomAccessFile input = new RandomAccessFile(nome, "r");
    
          int width, height;
          String header = input.readLine();
          width = Integer.parseInt(header.substring(0, header.indexOf(" ")));
          height = Integer.parseInt(header.substring(header.indexOf(" ") + 1,
                                                     header.length()));
          int size = width * height;
          int dsize = 2 * size;
    
          short[] uArray = new short[size];
          int[] iArray = new int[size];
          byte[] bArray = new byte[dsize];
          BufferedImage bufferedImage =
              new BufferedImage(width, height, BufferedImage.TYPE_USHORT_GRAY);
    
          WritableRaster raster = bufferedImage.getRaster();
          input.read(bArray);
          int index = 0;
          for (int h = 0; h < height; h++) {
            for (int w = width - 1; w >= 0; w--) {
              raster.setSample(w, h, 0,
                               ( (bArray[index++] & 0xff) << 8)
                               | (bArray[index++] & 0xff));
            }
          }
    
          RenderedOp image;
          if (!isLeft(nome)) {
            ParameterBlock pb = new ParameterBlock();
            pb.addSource(bufferedImage);
            pb.add(TransposeDescriptor.FLIP_HORIZONTAL);
            image = (RenderedOp) JAI.create("transpose", pb, null);
          }
          else {
            ParameterBlock pb = new ParameterBlock();
            pb.addSource(bufferedImage);
            pb.add(new double[] {0.0});
            image = (RenderedOp) JAI.create("addconst", pb, null);
          }
          return image;
    Quando l'oggetto paziente contiene un'istanza solo di questa RenderedOp, l'invio funziona. Ma se invece contiene un'istanza della RenderedOp creata come specificato precedentemente, l'invio fallisce.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.