Ok as a test I have synchronized the creation of the object with every object access down the road. Really curious if this makes any difference....
On Sep 27, 10:50 pm, Al Sutton <[email protected]> wrote: > I remember a Googler telling me volatile doesn't do anything in the dalvik VM. > > My suggestion would be use an AsyncTask and create the object in the > onPreExecute method. You can pass any data you need for the object creation > to the AsyncTask constructor. > > Al. > > On 27 Sep 2011, at 20:21, Matt Kanninen <[email protected]> wrote: > > > > > > > > > My guess is you need to use the volatile keyword on your variable. > > >http://www.google.com/search?q=java+volatile > > > On Sep 26, 6:10 pm, sebastian_bugiu > > <[email protected]> wrote: > >> I am absolutely positive that the object is initialized before the > >> thread accessing it starts. I moved the initialization in the > >> constructor that completes before the thread starts. I removed static > >> final. Nothing. The thread UI calls surfaceCreated and in it I create > >> this object and start a thread that later accesses the object and > >> somehow accessing the field in the run() method causes > >> NullPointerException. If I access it from the UI thread it works. Can > >> a field be thread specific? And for everybody else be invisible? And > >> why only on HTC Desire (haven't tested other HTC phones). I thought it > >> might be some race condition or something since it has a faster CPU > >> but the code really looks like this: > > >> status = new Status(); > >> Thread thread = new Thread() { > >> public void run() { > >> if (status == null) { > >> throw new NullPointerException(); > >> } > > >> }.start(); > > >> And on HTC is always null. > > >> On Sep 27, 3:44 am, Tim Mensch <[email protected]> wrote: > > >>> On 9/26/2011 6:36 PM, sebastian_bugiu wrote: > > >>>> I don't think there is an issue with my code as it works > >>>> just fine in the emulator and on other phones. After all accessing a > >>>> private static final initialized field should not yield a > >>>> NullPointerException in any circumstances... > > >>> Except if the class statics haven't been initialized yet? We're talking > >>> threads here. Aside from that: Are you POSITIVE that the null pointer is > >>> the static final field, and not something it's using? > > >>> Java isn't magic. You still have to write thread-aware code -- and you > >>> need to know how Java works with static initializers. I don't, which is > >>> why I recommended you ask that question in a Java forum, or one of the > >>> Android developer forums. > > >>> I just have to disagree with your premise: There simply isn't likely to > >>> be a difference in how Java behaves between platforms EXCEPT FOR TIMING > >>> ISSUES when you have a faster CPU. That's where threads can get you in > >>> trouble. > > >>> Tim > > > -- > > You received this message because you are subscribed to the Google Groups > > "Android Discuss" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]. > > For more options, visit this group > > athttp://groups.google.com/group/android-discuss?hl=en. -- You received this message because you are subscribed to the Google Groups "Android Discuss" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/android-discuss?hl=en.
