Java 如何允许作为接口实现的线程与JWindow对象通信?
如何获取网络计数器值以包含在我的主要JButton目标中?我是这样做的: Main.java:Java 如何允许作为接口实现的线程与JWindow对象通信?,java,oop,swing,interface,interface-implementation,Java,Oop,Swing,Interface,Interface Implementation,如何获取网络计数器值以包含在我的主要JButton目标中?我是这样做的: Main.java: package demo; import java.awt.BorderLayout; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JButton; import javax.swing.JWindow; public class Main extends JWindow {
package demo;
import java.awt.BorderLayout;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JWindow;
public class Main extends JWindow
{
private static JButton goal = new JButton("old");
private static JWindow j;
private static Process application;
public Main()
{
this.setLayout (new BorderLayout ());
this.setVisible(true);
this.add(goal,BorderLayout.NORTH);
}
public static void main(String[] args)
{
j = new Main();
j.setVisible(true);
try {
application = new Process();
application.start();
// <<<<< Here i want to see the counter, from network.java >>>>>
} catch (Exception ex) {
}
}
}
Network.java
package demo;
public class Network implements NetworkListener
{
public int counter = 0 ;
public void Registered()
{
System.out.println("network: " + counter);
counter++;
if (counter>40) System.exit(0);
}
}
NetworkListener.java
package demo;
public interface NetworkListener
{
public void Registered();
}
不太清楚您希望看到计数器的确切程度,假设您希望更新显示计数器的某些组件
基本上,您将需要一个最终导致通知EDT上计数器更改的设置,然后您的ui侦听该更改并根据需要更新组件。到岸价
public class Network implements NetworkListener
{
public int counter = 0 ;
public void registered()
{
System.out.println("network: " + counter);
counter++;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
fireCounterChanged( ... );
}
});
if (counter>40) System.exit(0);
}
public void addChangeListener(...) {
....
}
public void removeChangeListener(...) {
....
}
private void fireCounterChanged(...) {
// notify all listeners
}
}
// usage
ChangeListener l = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
button.setText("counter: " + ((NetWork) e.getSource()).counter;
}
};
与您的问题无关,但让阅读变得困难:请学习java命名约定并坚持它们:-)@kleopatra:ok学习并修改了。下一步?不太清楚(应该注册)-但请看努力:-)这确实清楚我的概念。但是,我很困惑,您是在哪里找到ChangeListener()类的?您是指NetworkListener()吗?不,ChangeListener是Swing中的侦听器类型-您可以使用任何您想要的类型,只要确保在EDT上发生通知即可。
public class Network implements NetworkListener
{
public int counter = 0 ;
public void registered()
{
System.out.println("network: " + counter);
counter++;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
fireCounterChanged( ... );
}
});
if (counter>40) System.exit(0);
}
public void addChangeListener(...) {
....
}
public void removeChangeListener(...) {
....
}
private void fireCounterChanged(...) {
// notify all listeners
}
}
// usage
ChangeListener l = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
button.setText("counter: " + ((NetWork) e.getSource()).counter;
}
};