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
成功了。
谢谢
我是 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
成功了。 谢谢