Sign in to follow this  

android java code problem

This topic is 2051 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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 = [b]new[/b] objLines[c_vertices.length/3];
.
.
.
[b]for[/b]([b]int[/b] i=0; i< (c_vertices.length); i=i+3){

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


rMaths.fToPoint3D( cLines, c_vertices, i );

}
...
calls this function...

[b]public[/b] [b]void[/b] fToPoint3D( objLines[] L, [b]float[/b][] f, [b]int[/b] 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**

Share this post


Link to post
Share on other sites
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[i] = new ObjLines();

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

Share this post


Link to post
Share on other sites
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[i] = new objLines();
}


Though you SHOULD make all your Classes start with an Uppercase letter - like ObjLines - and a bit more descriptive [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img]

Share this post


Link to post
Share on other sites
Many Many thanks for the hints, I finally got it working following what you suggested

initially when I added

cLines[i] = new objLines();

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

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

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

[b]L[i/3] = [/b][b]new[/b][b] objLines(); [/b]//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 [b]objLines[/b] class constructor:

[b]public[/b] objLines() {

[b]pLineStart = new point3D()[/b]; //modification
[b]pLineEnd = new point3D(); [/b]// 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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

This topic is 2051 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this