Я не понимаю, как разделить ядро моей программы с частью GUI моей программы. Действительно, все примеры в Интернете говорят о том, что любое действие GUI должно выполняться с помощью метода SwingUtilities.invokeLater().Ядро Java Swing отдельное ядро с графическим интерфейсом
Проблема в том, что я не понимаю, как я могу использовать этот метод для обработки только моей части GUI и того, как может взаимодействовать ядро и графический интерфейс.
Например, у меня есть класс, которые имеют reponsability графического интерфейса отображения некоторых вычислений:
public class GUI {
private JFrame window;
public GUI() {
window = null;
}
public void createWindow(int width, int height) {
window = new JFrame();
...
window.setVisible(true);
}
public void displayResults(Calcul results) {
/* Some Swing actions. */
}
}
и у меня есть ядро моей программы:
public class Core {
public static void main(String[] args) {
GUI gui = new GUI();
Calcul calculs = new Calcul();
while (true) {
/* Make some calculations. */
/* Put results into calcul. */
displayResults(calculs);
}
}
}
Я знаю, что это архитектура не идеальна, но я должен ее использовать. Мой вопрос в том, должен ли я использовать EDT для разделения части GUI и основной части? И, если ответ «да», как я могу это сделать?
Если возможно, мне нужно, чтобы вызовы EDT были прозрачными для пользователя, который использует класс GUI.
EDIT:
ли следующее преобразование класса GUI имеет ожидаемое поведение?
public class GUI {
private JFrame window;
public GUI() {
window = null;
}
public void createWindowEDT(final int width, final int height) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
createWindow(width, height);
}
}
);
}
private void createWindow(final int width, final int height) {
window = new JFrame();
...
window.setVisible(true);
}
public void displayResultsEDT(final Calcul results) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
displayResultsEDT(results);
}
}
);
}
private void displayResults(final Calcul results) {
/* Some Swing actions. */
}
}
10 «но я должен использовать его». Зачем? Почему вы должны использовать эту архитектуру? –
Потому что я должен дать класс людям, которые должны иметь дело с вычислениями и не должны заботиться о своем показе. – benlaug
Положите рабочие потоки в EDT - это способ иметь невосприимчивый графический интерфейс. –