我想编写一个程序,当数据库中发生某些事情时会自动调用管理员。要调用的号码应输入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
谢谢!
答案 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() {
使用wait
和notify
通知更改内容会更有效,但我认为这可能会正常工作。