Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何允许作为接口实现的线程与JWindow对象通信?_Java_Oop_Swing_Interface_Interface Implementation - Fatal编程技术网

Java 如何允许作为接口实现的线程与JWindow对象通信?

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 {

如何获取网络计数器值以包含在我的主要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
{
    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;
       }
};