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**
android java code problem
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.
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.
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
// 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
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.
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!
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 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
Popular Topics
Advertisement