Ajudem-me

31 respostas
L

Ola galera,
alguem pode me ajudar a resolver o erro q esta aparecendo ao rodar esse programa:

import java.io.;
import java.util.
;

class array4 {

public static void main(String[] args) {

BufferedReader inReader = null;//hdr

PrintWriter outWriter = null;//hdr

String line;//hdr

array4 f = new array4();

f.readMyFile();

}
void readMyFile() {

array4 f = new array4();

DataInputStream data = null; //Variables

DataOutputStream data2 = null;

String record = null;

int recCount = 0;

int n_rows, n_cols;

int c;

double dummy;

n_rows = 179; //x

n_cols = 254; //y

double[][] points = new double[n_rows][n_cols]; //2D Array

float a; //receive datas from 2D Arry
String line = null,lineTokens;//hdr
BufferedReader inReader = null;//hdr
PrintWriter outWriter = null;//hdr
int H_ncols;//hdr
int H_nrows;//hdr
double H_XCorner;//hdr
double H_YCorner;//hdr
int H_CellSize;//hdr
String H_Byteorder;//hdr
double H_Nodatavalue;//hdr


//.hdr file
try {
  inReader = new BufferedReader(new FileReader(
      "G:/tiago/Java/JavaProjects/array4/classes/Nutz_Esri.hdr"));
}
catch (FileNotFoundException e) {
  System.out.println("Achtung,InFile not found !!!");
  System.exit(1);
}

  FileReader H_infile = null;
  try {
    FileReader H_Infile = new FileReader(
        "G:/tiago/Java/JavaProjects/array4/classes/Nutz_Esri.hdr ");
  }
  catch (FileNotFoundException ex) {
  }
  BufferedReader H_datain = new BufferedReader(H_infile);
  try {
    line = H_datain.readLine();
  }
  catch (IOException ex1) {
  }
  StringTokenizer Tokens2 = new StringTokenizer(line,"	");

  try {
  outWriter = new PrintWriter(new FileWriter(
      "G:/tiago/Java/JavaProjects/array4/classes/HCopy.txt"));
}
catch (FileNotFoundException e) {
  System.out.println("Achtung,Could not open Exit File !!!");
  System.exit(1);
}
catch (IOException e) {
  System.err.println(e.getMessage());
  System.exit(1);
}
try {
  lineTokens = Tokens2.nextToken();//colums
  H_ncols = Integer.valueOf(lineTokens).intValue();
  System.out.println("N_cols =" + H_ncols);

  lineTokens = Tokens2.nextToken();//rows
  H_nrows = Integer.valueOf(lineTokens).intValue();
  System.out.println("N_rows =" + H_nrows);

  lineTokens = Tokens2.nextToken();//XCorner
  H_XCorner = Double.valueOf(lineTokens).doubleValue();
  System.out.println("N_XCorner =" + H_XCorner);

  lineTokens = Tokens2.nextToken();//YCorner
  H_YCorner = Double.valueOf(lineTokens).doubleValue();
  System.out.println("N_YCorner =" + H_YCorner);

  lineTokens = Tokens2.nextToken();//CellSize
  H_CellSize = Integer.valueOf(lineTokens).intValue();
  System.out.println("CellSize =" + H_CellSize);

  H_Byteorder = lineTokens;//Byteorder
  System.out.println("Byteoder =" + H_Byteorder);

  lineTokens = Tokens2.nextToken();//NodataValue
  H_Nodatavalue = Double.valueOf(lineTokens).doubleValue();
  System.out.println("Nodatavalue =" + H_Nodatavalue);

  inReader.close();
  outWriter.close();
}
catch (IOException e)  {
  System.err.println(e.getMessage());

}
}
}

Se alguem puder me ajudar…
Preciso pegar um arquivo que contem os seguintes dados:
ncols 254
nrows 179
xllcorner 3372500
yllcorner 5359500
cellsize 1000
byteorder MSBFIRST
nodata_value -9999
preciso abrir o arquivo,ler,e o reescreve-lo em outro novo arquivo,mas ta dando pau…e nao ta rodando.

Obrigado

31 Respostas

Daniel_Takabayashi

posta as mensagens de erro que aparece…pra gente te ajudar…

falow :smiley:

L
java.lang.NullPointerException

at java.io.Reader.<init>(Reader.java:61)

at java.io.BufferedReader.<init>(BufferedReader.java:76)

at java.io.BufferedReader.<init>(BufferedReader.java:91)

at array4.readMyFile(array4.java:56)

at array4.main(array4.java:10)

Exception in thread main

Essas sao as mensagens de erro…
Talvez agora possam visualizar o problema melhor.
Obrigado.

soaresinfo

primeiro de tudo voce tem que declarar a classe assim:

public class suaClasse {
...
}

na sua classe main voce faz referencia ao metodo construtor:

array4 f = new array4();

mas voce nao declarou um construtor :wink:

declare estas variavais como sendo globais:

BufferedReader inReader = null;//hdr 
PrintWriter outWriter = null;//hdr 
String line;//hdr

e depois inicializa elas no construtor…
assim voce nao precisa declarar essas variaveis em todos os metodos…

t+

cv1

“soaresinfo”:
primeiro de tudo voce tem que declarar a classe assim:

public class suaClasse {
...
}

Faltou explicar pq: se vc quer que a classe seja “rodavel” (ou seja, quer que ela tenha um metodo main()), ela deve ser publica. E mais, ela deveria ter um nominho melhor, nao? O que eh Array4!? :?

“soaresinfo”:
na sua classe main voce faz referencia ao metodo construtor:

array4 f = new array4();

mas voce nao declarou um construtor ;)

Acho que vc viajou aqui, Soares. Construtor default nao precisa ser declarado :wink:

“soaresinfo”:
declare estas variavais como sendo globais:

BufferedReader inReader = null;//hdr 
PrintWriter outWriter = null;//hdr 
String line;//hdr

e depois inicializa elas no construtor…
assim voce nao precisa declarar essas variaveis em todos os metodos…

Falando na declaracao das variaveis, voce esta declarando um MONTE de variaveis que nao esta usando, e as que vc usa estao sendo declaradas muito antes de serem usadas. Isso eh uma ma ideia, pq vc acaba se perdendo (como foi o que provavelmente aconteceu), e esquece alguma referencia como null. Daí a sua NullPointerException no metodo readMyFile, linha 56 :wink:

L

o galera,
quanto a essa criacao do construtor…como e onde que faco isso?
Outra coisa…quanto a declaracao das variaveis…eu coloco elas depois de:

public class array4 {
BufferedReader inReader = null;//hdr
PrintWriter outWriter = null;//hdr
String line;//hdr

public static void main(String[] args) {

desse jeito???
Obrigado

cv1

laine, te recomendo dar uma boa lida em um bom capitulo sobre escopo de variaveis, e modificadores de acesso, pra responder essas perguntas direitinho :smiley:

soaresinfo

eu coloquei a ideia do construtor para ela inicializar as variaveis, e ter garantia que elas estao num estado consistente,

Pergunta: se não precisa declarar um construtor, qual a finalidade de chamá-lo dentro da classe?

cv1

Construir o objeto ué! :smiley:

L

Ola galera,
valeu pelas dicas…vou tentar arrumar o problema.
Se tiverem alguma ideia,me comuniquem
Obrigado

L

Fala galera,
num to conseguindo fazer esse construtor nao,tem como alguem me ajudar nisso??
Obrigado

soaresinfo

mas se vc já iniciou a classe e está executando o método principal, o objeto já não existe na memoria??

L

Fala…
ow,nun sei nao cara,eu sou iniciante em java e num frago muito ainda…entao,ainda nao sei responder essa sua pergunta.

soaresinfo

essa é pro cv… :slight_smile:

L

Ola,
as outras variaveis que criei e nao estao sendo utilizadas,elas nao estao sendoi usadas nessa parte do programa,mas sim em outra parte do programa que nao inclui nas mensagens anteriores…

L

ve o que??

soaresinfo

quando eu disse “essa é pro cv”, eu quis dizer “cv o cara”, e nao para voce ver…
:wink:

L

ok,entendi

L

o construtor é mais ou menos assim…???

array4 (argumentos)
{ //constructor

}

qto ao argumento preciso fazer referencia à:
BufferedReader inReader = null;//hdr
PrintWriter outWriter = null;//hdr
String line;//hdr

como faco isso???

soaresinfo

vc pode por qualquer coisa como parametros, e pode nao por nada tambem, um construtor tem o mesmo nome da classe:

public nomeDaClasse(){ ... }

se vc quiser iniciar as variaveis é só colocar

public nomeDaClasse(){
BufferedReader inReader = null;//hdr 
PrintWriter outWriter = null;//hdr 
String line;//hdr 
}

ou entao:

public nomeDaClasse(BufferedReader inReader,PrintWriter     outWriter,String line){
this.inReader = inReader;
this.outWriter = outWrite;
this.line = line;
}

onde this.line faz com que a variavel line declarada dentro da classe, seja igual a variavel line passada como parametro do construtor, e o mesmo serve para os outros parametros…
ok?

L

Ok,eu fiz desse jeito…pode ser??

import java.io.;
import java.util.
;

public class array4 {
BufferedReader inReader = null;//hdr
PrintWriter outWriter = null;//hdr
String line;//hdr

array4 (){   //constructor

}

public static void main(String[] args) {

array4 f = new array4();
f.readMyFile();

}

cv1

Nao, pq main() eh um metodo estatico :wink:

soaresinfo

eu nunca declarei um construtor sem o public, mas se der certo, pode usar assim mesmo

soaresinfo

captei a vossa mensagem… :wink:

Nao, pq main() eh um metodo estatico ;)

L

Entao,como é um metodo estatico,o que devo fazer??

Compilei com o codigo dakele jeito,modificado,e deu erro.
Primerio aparece um ajanela dizendo:
FATAL Exception Occurred.
Program willl exit

E depois as mesmas msgs de erro de antes.

java.lang.NullPointerException

at java.io.Reader.&lt;init&gt;(Reader.java:61)

at java.io.BufferedReader.&lt;init&gt;(BufferedReader.java:76)

at java.io.BufferedReader.&lt;init&gt;(BufferedReader.java:91)

at array4.readMyFile(array4.java:60)

at array4.main(array4.java:16)

Exception in thread “main”

O que faco??
Se puder me ajudar…

soaresinfo

vc esta atribuindo a variavel

BufferedReader inReader = null;

sem estar dentro de um metodo, acho que isso nao é permitido,
declare apenas a variavel e depois coloque null nelas dentro do construtor, afinal é para isso que ele serve…

L

Desse jeito???

import java.io.;
import java.util.
;

public class array4 {
BufferedReader inReader;//hdr
PrintWriter outWriter;//hdr
String line;//hdr

public array4 ()  //constructor
{ BufferedReader inReader = null;
  PrintWriter outWriter = null;
 }
soaresinfo

sim

L

To compilando e ta acusanso os seguintes erros:

java.lang.NullPointerException

at java.io.Reader.&lt;init&gt;(Reader.java:61)

at java.io.BufferedReader.&lt;init&gt;(BufferedReader.java:76)

at java.io.BufferedReader.&lt;init&gt;(BufferedReader.java:91)

at array4.readMyFile(array4.java:61)

at array4.main(array4.java:17)

Exception in thread “main”

Nao tenho a minima ideia como faco para consertar esses erros,se souber de algo…pq nao tenho muita experiencia.

soaresinfo

eu nao to conseguindo encotrar tambem, só o que eu vejo nesse erro é o bloco do Reader, talvez ele nao esteja encontrando o arquivo, teste tambem nao colocar valor null nesses objetos, já que vc vai inicializa-los mais a frente, ou seja retire o codigo que está atribuindo as variaveis com null, comente o codigo se vc nao quiser perder…

cv1

“laine”:
java.lang.NullPointerException

at array4.readMyFile(array4.java:61)

Traduzindo: voce tentou chamar um metodo de uma variavel que nao possuia valor (ou seja, era null) na linha 61. O que tem na linha 61? Quais variaveis estao sendo manipuladas nessa linha? Onde esta a inicializacao delas? :wink:

soaresinfo

achei isso aki no codigo

String line = null,lineTokens;//hdr

esta errado, ou é null ou é lineTokens

posta a sua classe modificada aki de novo…

Criado 6 de abril de 2004
Ultima resposta 6 de abr. de 2004
Respostas 31
Participantes 4