Jump to content
  • Advertisement
Sign in to follow this  
run_g

android java code problem

This topic is 2239 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 = 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**

Share this post


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

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 = new objLines();
}


Though you SHOULD make all your Classes start with an Uppercase letter - like ObjLines - and a bit more descriptive smile.png

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 = 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.

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
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!