0

私は、Gui と呼ばれるクラスと Listener と呼ばれる 2 つのクラスを持っています。

リスナーのコードは次のとおりです。

 package app.assignment.u0961036.core;

import net.jini.space.JavaSpace;


public class Listener extends Thread {

private JavaSpace space;
private Gui list;

    public void run() {
        space = SpaceUtils.getSpace("localhost");
        System.out.println("In Listener");
        int i = 0;
        while(true){
            i++;
            try{
                Message mTemplate = new Message();
                System.out.println("Listner: template created");
                Message nextMessage = (Message)space.take(mTemplate,null,Long.MAX_VALUE);
                System.out.println("Listner: Message created");
                String message = nextMessage.message;
                System.out.println("Listner: message= "+message);
                list.newMessage(message);
                }  catch ( Exception e) {
                e.printStackTrace();
                }
            if(i % 10 == 0){
                System.out.println("I = "+i);
            }
        }
    }

    public static void listen() {

        (new Listener()).start();

    }

関連する Gui のコードは次のとおりです。

 public void newMessage(String message){
    System.out.println("in new message");
    chatTextArea.append(" Someone Says: " + message + "\n" );

}

リスナーのコードが実行されると、次の行からヌル ポインターを取得します。

list.newMessage(message);

オブジェクトが作成されているため、理由はわかりません。まだ推測していない場合は、GUI クラスも作成されます。

何か案は?

4

1 に答える 1

0
package app.assignment.u0961036.core;

import net.jini.space.JavaSpace;


public class Listener extends Thread {

private JavaSpace space;
space = new JavaSpace();
private Gui list; 
list = new Gui(); 

public void run() {
    space = SpaceUtils.getSpace("localhost");
    System.out.println("In Listener");
    int i = 0;
    while(true){
        i++;
        try{
            Message mTemplate = new Message();
            System.out.println("Listner: template created");
            Message nextMessage = (Message)space.take(mTemplate,null,Long.MAX_VALUE);
            System.out.println("Listner: Message created");
            String message = nextMessage.message;
            System.out.println("Listner: message= "+message);
            list.newMessage(message);
            }  catch ( Exception e) {
            e.printStackTrace();
            }
        if(i % 10 == 0){
            System.out.println("I = "+i);
        }
    }
}

public static void listen() {

    (new Listener()).start();

}

上記のコードで問題が解決するはずです。Javaでは、オブジェクトを宣言、インスタンス化、および初期化することによってオブジェクトを作成します。詳細については、こちらをお読みください。

于 2012-10-26T22:14:57.260 に答える