从其他方法访问gui

时间:2018-05-04 08:41:26

标签: java class user-interface

我想编写一个程序,当数据库中发生某些事情时会自动调用管理员。要调用的号码应输入AsNoTracking,按下按钮后应将其写入变量。

所以我的gui课程看起来像这样:

var possibleResults = cas.Where(x => x.Datetime >= min && x.Datetime <= max).AsNoTracking().ToList(); //around 4,6599ms

我的测试类看起来像这样:

TextField

如何在package ui_test; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class UI implements ActionListener{ JFrame frame; JPanel panel; JButton button; JTextField textField; JTextField textFieldInfo; private String adminTelNumber = ""; public UI() { frame = new JFrame("Caller GUI"); panel = new JPanel(); textField = new JTextField(); textFieldInfo = new JTextField(); textField.setText("Nummer eingeben!"); textFieldInfo.setText("Hier kommt die Info!"); button = new JButton("Übernehmen"); button.addActionListener(this); panel.add(textField); panel.add(button); panel.add(textFieldInfo); frame.add(panel); frame.pack(); frame.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == button){ adminTelNumber = textField.getText(); textFieldInfo.setText(this.getAdminTelNumber().toString().trim()); } } public String getAdminTelNumber() { return adminTelNumber; } } 中拨打package ui_test; import java.awt.EventQueue; public class UiTest { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { UI ui = new UI(); } catch (Exception e) { e.printStackTrace(); } } }); doSomething(); } public static void doSomething() { String telNumber = ui.getAdminTelNumber(); } } 或访问我想要的getAdminTelNumber变量?

顺便说一句......真正的adminTelNumber有一个无休止的循环,里面有睡眠定时器。每次重复都要检查doSomething是否发生了变化。所以它应该调用实际的数字。

希望你能帮助我......我非常棒:D

谢谢!

1 个答案:

答案 0 :(得分:0)

这里有两个问题需要解决:

首先,完全从其他线程访问UI。这是简单的部分。您不需要在后台线程上创建UI,所以让我们摆脱它:

public static void main(String[] args) {
    UI ui = null;
    try {
         ui = new UI();
         doSomething(ui);
    } catch (Exception e) {
         e.printStackTrace();
    }
}

public static void doSomething(UI ui) {

其次,以线程安全的方式从其他线程访问UI - 最简单的方法是使读取和写入同步:

public synchronized void actionPerformed(ActionEvent e) {

public synchronized String getAdminTelNumber() {

使用waitnotify通知更改内容会更有效,但我认为这可能会正常工作。