2012-05-02 21 views
0

戻る私はこのような何かを行うことができ、私は可能なスイングを使用していたとき。..別のクラスからSWT GUIを呼び出す方法は?

java.awt.EventQueue.invokeLater(new Runnable() { 
public void run() { 
gui = new GUI(); 
gui.setVisible(true); 
} 
} 

を今、私はSWTを使用していると私は同じ方法を使用してGUIを作成しようとしています。 guiが表示されないか、guiがフリーズします。私はこれをアプリケーション全体のモジュールとして開発しているので、これを別のクラスから呼び出そうとしています。

これは私がこれまで試したどのように..です

gui = new GUI(); 
gui.open(); 

私はまた、上記括弧で試してみましたが、私は運がなかったしています。ここで

は、GUIクラス

package org.eclipse.swt.snippets; 

import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 

public class GUI { 

protected Shell shell; 

/** 
* Launch the application. 
* @param args 
*/ 
public static void main(String[] args) { 
    try { 
     GUI window = new GUI(); 
     window.open(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

/** 
* Open the window. 
*/ 
public void open() { 
    Display display = Display.getDefault(); 
    createContents(); 
    shell.open(); 
    shell.layout(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 
} 

/** 
* Create contents of the window. 
*/ 
protected void createContents() { 
    shell = new Shell(); 
    shell.setSize(450, 300); 
    shell.setText("SWT Application"); 

} 

} 

である私は、問題がshell = new Shell()から来ているかなり確信しているコンストラクタが、まだ運

+0

誰かが正しく働いている解決策を手に入れましたか?私はSWTで新しく、それを理解していないようだ...私はコントローラクラスからGUIを起動しようとしている... [はい、私は自分の質問を開始する誰も答えない場合やここで回答が見つかりません] – user1628658

+0

FWIW:私の作業コードはここにあります(かなり前に書かれました) https://github.com/Sovietaced/Avior/blob/master/src/view/Gui。 Java – Sovietaced

答えて

0

を形成するためのGUIクラスを編集して試してみました。私が覚えている限り、ディスプレイはシェルコンストラクタに渡されなければならないので、どこにアタッチするかを知っている必要があります。

私はこのようなものに変更して、それをしようとするだろう:

/** 
* Open the window. 
*/ 
public void open() { 
    Display display = Display.getDefault(); 
    createContents(display); 
    shell.open(); 
    shell.layout(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 
} 

/** 
* Create contents of the window. 
*/ 
protected void createContents(Display display) { 
    shell = new Shell(display); 
    shell.setSize(450, 300); 
    shell.setText("SWT Application"); 

私も、このマシン上でEclipseやSWTを持っていないので、私はそれをテストすることはできませんとのメモリをオフつもりですSWT階層の仕組み

+0

残念ながら、それは何も役に立たなかった。私はウィンドウビルダを使ってコードを生成しているので、きれいにすべきです。私は仕事を続けて、クリスの助けを借りて少し前進しました。 Th guiが新しいスレッドでポップアップし、挿入したテキストボックスに入力できます。問題は、一度ボックスを閉じようとすると、すべてが凍ってしまい、強制終了して何かがまだファンキーになっている必要があるということです。私はちょうど混乱しているので、いくつかのタイプのウィンドウを閉じるリスナーを実装する必要があるとは思わない。今 GUIクラスのよう – Sovietaced

+0

コード:http://pastebin.com/8F4ZyWwT ので \t \tするSystem.out.printlnのようなコンストラクタ呼び出しで( "コンストラクタを呼び出すことについて - cPanelの"); \t \t GUI gui = new GUI(); – Sovietaced

+0

私のマシン上で上記の変更を実行し、正常に動作しました。 GUIを起動し、ボックスに入力することができ、問題なく終了できました。ここで私が使用した正確なコードの要点があります:[gist](https://gist.github.com/2591511)。 – Attamusc

関連する問題