
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_java_awt_peer_gtk_GtkMainThread__
#define __gnu_java_awt_peer_gtk_GtkMainThread__

#pragma interface

#include <java/lang/Thread.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace gtk
          {
              class GtkMainThread;
          }
        }
      }
    }
  }
}

class gnu::java::awt::peer::gtk::GtkMainThread : public ::java::lang::Thread
{

  GtkMainThread();
public:
  virtual void run();
private:
  static void setRunning(jboolean);
  static void startMainThread();
  static void endMainThread();
public:
  static void createWindow();
  static void destroyWindow();
private:
  static jint numberOfWindows;
  static ::java::lang::Object * nWindowsLock;
  static jboolean running;
  static ::java::lang::Object * runningLock;
public:
  static ::gnu::java::awt::peer::gtk::GtkMainThread * mainThread;
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_gtk_GtkMainThread__
