Sequentielles Abarbeiten von Methoden

Status
Nicht offen für weitere Antworten.

Joachim

Mitglied
Hi, hier eine typische Anfängerfrage,

kleines Problem, großer Ärger !!!

ich möchte eine umfangreiche Datenmatrix einlesen, die Werte konvertieren und danach als Tabelle editieren, das ganze funktioniert prächtig, solange ich den programmcode am stück eingebe , also

Code:
public class konvertEcit
{
    konvertEdit()
    {
       programmcode Daten einlesen
       programmcode Werte konvertieren
       programmcode Tabelle editieren
    }
}


problem: das aufteilen des Programmcodes auf verschiedene Methoden wirft mir immer einer NullpointerException für die zu editierende Tabelle
Code:
public class konvertEcit
{
    konvertEdit()
    {
       readData();
       konvertData();
       editTabelle();
    }
     
    public void readData(){ programmcode Daten einlesen}
    public void konvertData(){ programmcode Werte konvertieren}
    public void editTabelle(){ programmcode Tabelle editieren}
}


vielen Dank für die Hilfe im voraus!!!
 
ehm schön und gut. und? NullPointerExceptions sind jawohl ziemlich eindeutig! ich kenn deinen code nicht, aber ich würd mal sagen du must die daten irgendwo abspeichern inner globalen variable.
 
Die Werte werden als globale Variable abgespeichert.

Gerade die globale Variable String[][] Tabellenwerte wirft bei der Programmvariante mehrerer Methoden auch die NullpointerException (nicht jedoch bei Programmcode am Stück)[/code]
 
wenn das ein array ist überprüf doch mal ob 1. das array null ist oder 2.ob einer der inhalte auf den du zugreifen willst null ist.
 
Oder poste den Code...

Und überprüf, dass du nicht eine Variable mehrmals definiert hast (einmal als globale, einmal als Methodenvariable ! )
 
vielen Dank für Eure raschen Antworten,

Wert der globalen Varialben String[][] Tabelle: null (nur bei Codeaufteilung auf verschiedene Methoden)

das problem ist, glaube ich, die parallelverarbeitung in Java, sobald man die 3 verschiedene Methoden aufruft, ruft das Programm unmittelbar nacheinander die 1. Methode, dann die 2. und 3. auf. Die in der 1. Methode eingelesenen Werte String[][] Tabelle liegen also für die 3. Editiertmethode noch nicht vor!!!
 
nein das tut java nicht. das wären dann ja threads. du wirst wohl irgendeinen fehler im code haben. poste doch mal den code.
 
Dann poste halt mehrere Klassen.

Sorry, je weniger Informationen wir haben, desto schlechter können wir helfen. Hellseher sind wir nämlich nicht...
 
Code:
import java.lang.Math.*;

public class Test
{


	public static final String TESTFILE = "\\me\\data\\datei.txt";


	Me me;

	public Test()
	{
		//ladeDaten();
		//schreibeDaten();
		//test = new AnimDatRead(TESTFILE);
		//String[] Spaltennamen = test.ladeVariablenNamen_ASCII_FrameTime();
		//String[][] Tabelle = test.ladeTabWerte_ASCII_FrameTime();

        ladeDaten();
        konvertieren();
	}



	public void ladeDaten()
	{
		//lade Daten
		test = new DatRead(TESTFILE);
		String[][] Tabelle = test.ladeTabWerte_ASCII_FrameTime();
		//lade Daten








		//AnimDatWrite test2 = new AnimDatWrite(TESTFILE+"_konv");
		//test2.writeASCII(Spaltennamen, Tabelle);

	}

	public void konvertPos(int[] SpaltenIndex)
	{
		int j=0;
		while(j<SpaltenIndex.length)
		{

			for(int i = 0; i<me.Tabelle.length;++i)//Zeile
			{
				Double konvToInt = new Double(me.Tabelle[i][SpaltenIndex[j]]);
				double Wert = konvToInt.doubleValue();
				me.Tabelle[i][SpaltenIndex[j]] = String.valueOf((Wert/POSKONV)*INCHTOCM);
			}
		++j;
		}
	}

	public void konvertRot(int[] SpaltenIndex)
	{
		int k=0;
		while(k<SpaltenIndex.length)
		{

			for(int i = 0; i<me.Tabelle.length;++i)//Zeile
			{
				Double konvToInt = new Double(me.Tabelle[i][SpaltenIndex[k]]);
				double Wert = konvToInt.doubleValue();
				me.Tabelle[i][SpaltenIndex[k]] = String.valueOf(Wert/WINKONV);
			}
		++k;
		}
	}

	public void konvertRatio(int[] SpaltenIndex)
	{
		int k=0;
		while(k<SpaltenIndex.length)
		{

			for(int i = 0; i<me.Tabelle.length;++i)//Zeile
			{
				Double konvToInt = new Double(me.Tabelle[i][SpaltenIndex[k]]);
				double Wert = konvToInt.doubleValue();
				me.Tabelle[i][SpaltenIndex[k]] = String.valueOf(Math.atan(Wert/RATIOKONV));
			}
		++k;
		}
	}



	public void konvertieren()
	{

		//------------------Positionsdaten Polhemus
		int[] SpaltenIndex = new int[12];

		//linke Handposition_x/y/z
		SpaltenIndex[0] = 22+2;
		SpaltenIndex[1] = 23+2;
		SpaltenIndex[2] = 24+2;
		//rechte Handposition_x/y/z
		SpaltenIndex[3] = 50+2;
		SpaltenIndex[4] = 51+2;
		SpaltenIndex[5] = 52+2;
		//Kopfposition x/y/z
		SpaltenIndex[6] = 66+2;
		SpaltenIndex[7] = 67+2;
		SpaltenIndex[8] = 68+2;
		//Rumpfposition_x/y/z
		SpaltenIndex[9] = 72+2;
		SpaltenIndex[10] = 73+2;
		SpaltenIndex[11] = 74+2;
		konvRot(SpaltenIndex);




	}

	public void AnzeigenTabelle()
	{
    	AnimDatEdit anzeige = new AnimDatEdit("Test", me.Tabelle);
    }


	public static void main(String[] args)
	{
		Test test = new Test();
	}
}
 
Was geschieht hier mit der "Tabelle" ?
Du erstellst hier eine Methodenvariable, die nur innerhalb der Methode gültig / bekannt ist.

Code:
   public void ladeDaten()
   {
      //lade Daten
      test = new DatRead(TESTFILE);
      String[][] Tabelle = test.ladeTabWerte_ASCII_FrameTime();
      //lade Daten


      //AnimDatWrite test2 = new AnimDatWrite(TESTFILE+"_konv");
      //test2.writeASCII(Spaltennamen, Tabelle);

   }

Speicherst du die "Tabelle" später auch in einer Instanzvariable ab? Ansonsten verlierst Du hier alle geladenen Informationen wieder.

Das müsste bei Dir etwa so aussehen:
Code:
me.tabelle = tabelle;

(P.S. Variablen schreibt man normalerweise klein "Tabelle" -> "tabelle", das hat sich einfach so eingebürgert, und erleichert das Lesen von Quellcode)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben