Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!


We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


android java code problem


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 run_g   Members   -  Reputation: 212

Like
0Likes
Like

Posted 24 April 2012 - 10:14 AM

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**

Sponsor:

#2 dpadam450   Members   -  Reputation: 932

Like
0Likes
Like

Posted 24 April 2012 - 11:53 AM

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 = new objLines[c_vertices.length/3];
Just makes an Array *object*. It did not make any objLines Objects.

#3 MESEnterprisesLLC   Members   -  Reputation: 107

Like
0Likes
Like

Posted 24 April 2012 - 12:29 PM

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 Posted Image
Michael Suess
MES Enterprises, LLC
http://mesenterprisesllc.com

#4 run_g   Members   -  Reputation: 212

Like
0Likes
Like

Posted 25 April 2012 - 06:47 AM

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

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.

#5 MESEnterprisesLLC   Members   -  Reputation: 107

Like
0Likes
Like

Posted 25 April 2012 - 08:18 AM

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

#6 Mihai Moldovan   Members   -  Reputation: 127

Like
1Likes
Like

Posted 30 April 2012 - 06:24 PM

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.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS