예제 #1
0
    function init()
    {
        $this->frame = $frame = new java("javax.swing.JFrame", "SwingApplication");
        $frame->setDefaultcloseOperation($frame->EXIT_ON_CLOSE);
        $contents = $this->createComponents();
        $contentPane = $frame->getContentPane();
        $BorderLayout = new JavaClass("java.awt.BorderLayout");
        $contentPane->add($contents, $BorderLayout->CENTER);
        $frame->pack();
    }
    function run()
    {
        $this->frame->setVisible(true);
    }
}
$swing = new SwingApplication();
$swing->init();
$SwingUtilities = new JavaClass("javax.swing.SwingUtilities");
$SwingUtilities->invokeAndWait(java_closure($swing, null, java("java.lang.Runnable")));
// Due to swings insane design we don't know when the UI thread
// terminates. It may even be that the thread and therefore the VM
// never terminates, for example if a PrinterJob has been created on
// solaris, see the extensive number of related swing bugs.  The only
// reliable way to terminate a swing application is to call
// System.exit(..) which terminates all threads at once. So while we
// must terminate the whole server by calling System.exit(), we can
// wait here forever until the communication channel breaks.  If this
// happens the low-level php protocol code automatically calls
// exit(6). (If use use a php version with debug symbols, it will
// abort and dump core instead, but that's what we expect). -- To
// repeate the above statement: PLEASE DO NOT USE SWING TO CREATE A
 function run()
 {
     $app = new SwingApplication();
     $app->createAndShowGUI();
 }