COMM_UP 无法解析为变量

COMM_UP cannot be resolved to a variable

我是 java 的新手,我只想为客户端编译示例: http://www.oracle.com/technetwork/articles/javase/index-139946.html

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.CharBuffer;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.io.PrintStream;
import com.sun.nio.sctp.*;

public class MultilingualDayTimeClient {
    static int SERVER_PORT = 3456;
    static int US_STREAM = 0;
    static int FR_STREAM = 1;

    public static void main(String[] args) throws IOException {
        InetSocketAddress serverAddr = new InetSocketAddress("localhost", 
                                                             SERVER_PORT);
        ByteBuffer buf = ByteBuffer.allocateDirect(60);
        Charset charset = Charset.forName("ISO-8859-1");
        CharsetDecoder decoder = charset.newDecoder();

        SctpChannel sc = SctpChannel.open(serverAddr, 0, 0);

        /* handler to keep track of association setup and termination */
        AssociationHandler assocHandler = new AssociationHandler();

         /* expect two messages and two notifications */
        MessageInfo messageInfo = null;
        do {
            messageInfo = sc.receive(buf, System.out, assocHandler);
            buf.flip();

            if (buf.remaining() > 0 &&
                messageInfo.streamNumber() == US_STREAM) {

                System.out.println("(US) " + decoder.decode(buf).toString());
            } else if (buf.remaining() > 0 && 
                       messageInfo.streamNumber() == FR_STREAM) {

                System.out.println("(FR) " +  decoder.decode(buf).toString());
            }
            buf.clear();
        } while (messageInfo != null);

        sc.close();
    }

    static class AssociationHandler
        extends AbstractNotificationHandler<PrintStream>
    {
        public HandlerResult handleNotification(AssociationChangeNotification not,
                                                PrintStream stream) {
            if (not.event().equals(COMM_UP)) {
                int outbound = not.association().maxOutboundStreams();
                int inbound = not.association().maxInboundStreams();
                stream.printf("New association setup with %d outbound streams" +
                              ", and %d inbound streams.\n", outbound, inbound);
            }

            return HandlerResult.CONTINUE;
        }

        public HandlerResult handleNotification(ShutdownNotification not,
                                                PrintStream stream) {
            stream.printf("The association has been shutdown.\n");
            return HandlerResult.RETURN;
        }
    }   


}

当我在 eclipse 下用 java1.7.0-jdk 编译代码时,我得到错误信息:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: COMM_UP cannot be resolved to a variable

据我了解COMM_UP是在com.sun.nio.sctp.AssociationChangeNotification.AssocChangeEvent类型中定义的 我导入的是:

 import com.sun.nio.sctp.*;

为什么我无法遵守?

问候

使用:

AssociationChangeNotification.AssocChangeEvent.COMM_UP

而不只是 COMM_UP 来引用这个值 - 它是 AssociationChangeNotification class 的内部 class 中的一个 enum 值,所以你必须以这种方式引用它(或使用更多导入)。

感谢您的回答,

import com.sun.nio.sctp.AssociationChangeNotification.AssocChangeEvent;

没用。我认为格雷格给出了为什么这不起作用的答案:

it is an enum value in an inner class of the AssociationChangeNotification class so you must refer to it this way (or use more imports).

使用:

AssociationChangeNotification.AssocChangeEvent.COMM_UP

成功了。 谢谢