android java code problem

Started by
4 comments, last by mihaimoldovan 11 years, 11 months ago
I have a crash (forced close) in the android emulator. I traced the error to the code extract below, but I dont know how to rectify it. I'm more used to C++ , so it might be something that java doesnt allow. But I have no ideas now why it crashes.

cLines = new objLines[c_vertices.length/3];
.
.
.
for(int i=0; i< (c_vertices.length); i=i+3){

Log.e("i = ", Float.toString( i ) );


rMaths.fToPoint3D( cLines, c_vertices, i );

}
...
calls this function...

public void fToPoint3D( objLines[] L, float[] f, int i ){

// Log.e("x = ", Float.toString(f[i+0]) );

L[i/3].pLineStart.x = f[i+0];
L[i/3].pLineStart.y = f[i+1];
L[i/3].pLineStart.z = f[i+2];

}


the above code crashes. BUT if I comment this lines below it runs well
// L[i/3].pLineStart.x = f[i+0];
// L[i/3].pLineStart.y = f[i+1];
// L[i/3].pLineStart.z = f[i+2];

But I cant figure out why it crashes at this code in the first place. Any clues? **All arrays are within bounds**
Advertisement
In java arrays themselves are objects. So you newed an object Array[size], but the objects inside need to be newed. Just think of everything as a pointer and java makes sense.

cLines = new ObjLines();

So your first line:
cLines = new objLines[c_vertices.length/3];
Just makes an Array *object*. It did not make any objLines Objects.

NBA2K, Madden, Maneater, Killing Floor, Sims http://www.pawlowskipinball.com/pinballeternal

You need to (after the cLines = new objLines[c_verticies.length/3];) :

// Actually creates the objLines objects for the array
for (int i=0;i<c_vertices.length; i+=3) {
cLines = new objLines();
}


Though you SHOULD make all your Classes start with an Uppercase letter - like ObjLines - and a bit more descriptive smile.png
Michael Suess
MES Enterprises, LLC
http://mesenterprisesllc.com
Many Many thanks for the hints, I finally got it working following what you suggested

initially when I added

cLines = new objLines();

...it still crashed but thats because there wasn't a 1 to 1 between L[i/3] and cLines and the gaps caused it to crash, so I added L[i/3] = new objLines() as below

public void fToPoint3D( objLines[] L, float[] f, int i ){

// Log.e("x = ", Float.toString(f[i+0]) );

L[i/3] = new objLines(); //modification
L[i/3].pLineStart.x = f[i+0];
L[i/3].pLineStart.y = f[i+1];
L[i/3].pLineStart.z = f[i+2];

}

in addition to stop the crash I finally had to include these in the objLines class constructor:

public objLines() {

pLineStart = new point3D(); //modification
pLineEnd = new point3D(); // modification
}

and finally runs well!
overall with these extra inconveniences I think java is a pain in the neck. In a large software development it distracts from proper algorithm coding, no wonder most programmers dislike java.
Yeah, Java takes a little bit to get used to - Good to hear that you resolved your issues!
Michael Suess
MES Enterprises, LLC
http://mesenterprisesllc.com
It's my experience that Java code on Android will tend to crash about 1000 times more often than the same amount of native code.

This can probably be attributed to the many noob developers looking to develop their own app without ever properly learning the language as well as the paltform inherently being unstable due to crappy decisions by Google engineers working under time pressure.

This topic is closed to new replies.

Advertisement