2015-06-22 6 views
1

I`m новичок в Java, и я просто хотел, чтобы скомпилировать пример для клиента от: http://www.oracle.com/technetwork/articles/javase/index-139946.htmlCOMM_UP не может быть решена с переменной

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; 
     } 
    } 


} 

Когда я компилировать код с 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.*; 

Почему я не могу справиться?

Приветствия

ответ

0

Использование:

AssociationChangeNotification.AssocChangeEvent.COMM_UP 

, а не просто COMM_UP обратиться к этому значению - это enum значение во внутреннем классе AssociationChangeNotification класса, так что вы должны относиться к нему так (или использовать больше импорта).

0

Спасибо за ответы,

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 

работал. Thanks

Смежные вопросы