com.jogamp.newt.util

## Class MainThread

- java.lang.Object
- - com.jogamp.newt.util.MainThread

-     public class MainThread
      extends Object

  NEWT Utility class MainThread

  FIXME: Update this documentation! This class just provides a main-thread utility, forking of a main java class on another thread while being able to continue doing platform specific things on the main-thread. The latter is essential for eg. MacOSX, where we continue to run NSApp.run().

  This class provides a startup singleton main thread, from which a new thread with the users main class is launched.
  Such behavior is necessary for native windowing toolkits, where the windowing management must happen on the so called main thread e.g. for Mac OS X !
  Utilizing this class as a launchpad, now you are able to use a NEWT multithreaded application with window handling within the different threads, even on these restricted platforms.
  To support your NEWT Window platform, you have to pass your main thread actions to `invoke(..)`, have a look at the `NEWT Mac OSX Window` driver implementation.
  TODO: Some hardcoded dependencies exist in this implementation, where you have to patch this code or factor it out.

  If your platform is not Mac OS X, but you want to test your code without modifying this class, you have to set the system property `newt.MainThread.force` to `true`.

  The code is compatible with all other platform, which support multithreaded windowing handling. Since those platforms won't trigger the main thread serialization, the main method will be simply executed, in case you haven't set `newt.MainThread.force` to `true`.

  Test case on Mac OS X (or any other platform):

          java -XstartOnFirstThread com.jogamp.newt.util.MainThread demos.es1.RedSquare -GL2 -GL2 -GL2 -GL2

  Which starts 4 threads, each with a window and OpenGL rendering.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static boolean` | `HINT_USE_MAIN_THREAD` if true, use the main thread EDT, otherwise AWT's EDT
    `static boolean` | `useMainThread`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MainThread()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static MainThread` | `getSingleton()`
    `static void` | `main(String[] args)` Your new java application main entry, which pipelines your application

    - ### Methods inherited from class java.lang.Object

      `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### HINT_USE_MAIN_THREAD

          public static final boolean HINT_USE_MAIN_THREAD

      if true, use the main thread EDT, otherwise AWT's EDT

    - #### useMainThread

          public static boolean useMainThread

  - ### Constructor Detail

    - #### MainThread

          public MainThread()

  - ### Method Detail

    - #### main

          public static void main(String[] args)
                           throws SecurityException,
                                  NoSuchMethodException,
                                  ClassNotFoundException

      Your new java application main entry, which pipelines your application
      Throws:
        `ClassNotFoundException`
        `NoSuchMethodException`
        `SecurityException`

    - #### getSingleton

          public static MainThread getSingleton()

Copyright 2010 JogAmp Community.