The attached code generates a NullPointerException which I do not
understand, as none of the relevant objects appear to be null.  Any
explanation or work-around would be appreciated. I am using JDK 1.0.2 on a
Debain 2.0 box, libc5.  I need to stick with 1.0.2 for this project so
that 3.0 browsers can run the code. 

Here is the error message produced by the driver program:

bash-2.00$ java ReaderTest 
0
19928
0
java.io.PipedOutputStream@404e8698
java.lang.NullPointerException
        at java.io.PipedOutputStream.write(PipedOutputStream.java)
        at java.io.OutputStream.write(OutputStream.java)
        at seismo.Reader.run(Reader.java:38)

Thanks,

Richard Hall
Network Services
University of Tennessee
import seismo.Reader;
import java.net.MalformedURLException;

public class ReaderTest {

  public static void main(String[] args) {
    try {
      Reader r = new Reader("http://pobox.ns.utk.edu/~hall/java/seismo/data/test");
    }
    catch(MalformedURLException e) { System.out.println("Learn to type"); }
  }

}
package seismo;

import java.io.*;
import java.net.*;

public class Reader extends Thread implements SeismoFeed {
  private PipedOutputStream output;
  private InputStream stream;
  private int compress_factor = 1;
  private boolean compressed = false;
  private boolean simple = false;
  private int total;
  private int MAX = 576000;

  public Reader(URL u) {
    try {
      stream = u.openStream();
      output = new PipedOutputStream();
      start();
    }
    catch(IOException e) { System.err.println("Reader unable to find data"); }
  }

  public Reader(String s) throws MalformedURLException { this(new URL(s)); }

  public void run() {
    while(true) {
      byte[] b = null;
      int bite = 0;

      try {
        while((bite = stream.available()) > 0) {
          stream.read((b = new byte[bite]));
System.out.println(b[0]);
System.out.println(b.length);
System.out.println(b[b.length - 1]);
System.out.println(output.toString());
          output.write(b);
          total += bite;
        }
      }
      catch(IOException e) {
        System.err.println("IOException while reading from stream.  Aborting");
        die();
      }

      if(total >= MAX) die();
      yield();
    }
  }

  public void die() {
    try {
      stream.close();
      output.close();
    }
    catch(IOException e) {}

    stream = null;
    output = null;
    stop();
  }

  public PipedOutputStream getOutput() { return output; }

  public void setCompression(int cf) {
    compressed = true;
    compress_factor = cf;
  }

  public void noCompression() { compressed = false; }

}

Reply via email to