2012-05-02 2 views
0

назад, когда я использовал свинг я смог в состоянии сделать что-то вроде этого ..Как вызвать SWT GUI из другого класса?

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

Теперь я использую SWT, и я пытаюсь создать графический интерфейс пользователя, используя тот же способ. Либо gui не появится, или gui замерзнет. Я пытаюсь назвать это из другого класса, потому что я разрабатываю это как модуль для всего приложения.

Это, как я пытался до сих пор ..

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

Я также попытался с вышеупомянутыми скобками, но у меня не было никакой удачи.

Вот графический интерфейс класс

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"); 

} 

} 

Я попытался отредактировать класс графического интерфейса, чтобы сформировать конструктор, но до сих пор нет удачи

+0

Простите, но кто-нибудь получил правильное рабочее решение? Я новичок в SWT, не могу понять, что это ... Я пытаюсь запустить графический интерфейс из класса контроллера ... [Да, я начну свой собственный вопрос, если никто не ответит, или если я не найдут ответа здесь] – user1628658

+0

FWIW: Мой рабочий код существует здесь (было написано довольно давно) https://github.com/Sovietaced/Avior/blob/master/src/view/Gui. java – Sovietaced

ответ

0

Я довольно уверен, что проблема исходит от shell = new Shell(). Насколько я помню, дисплей должен перейти к конструктору Shell, чтобы он знал, где его можно подключить.

Я хотел бы изменить его на что-то вроде этого и попробовать:

/** 
* 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 появляется в новом потоке, и я могу ввести текстовое поле, которое я вставил. Проблема в том, что когда я пытаюсь закрыть коробку, все это просто зависает, и мне нужно заставить бросить, так что что-то все еще действует нахальный. Я не верю, что мне нужно было бы реализовать какой-то тип закрытия окна, поэтому я просто смущен. – Sovietaced

+0

кодекса как сейчас графического интерфейса класса: http://pastebin.com/8F4ZyWwT с вызовом конструктора, как так \t \t System.out.println («О том, чтобы вызвать конструктор - CPanel»); \t \t GUI gui = новый GUI(); – Sovietaced

+0

Отказ от изменений выше на моей машине, и он отлично работал. Запустил графический интерфейс, смог ввести в поле и смог закрыть без проблем. Вот суть точного кода, который я использовал: [gist] (https://gist.github.com/2591511). – Attamusc

Смежные вопросы