0

クライアントサーバー予約システムの GUI を作成するために、swing jFrame を使用しています。これで宣言された DatagramSocket を使用したいクライアントで問題が発生しました。

public BookingClientUI() throws SocketException {
        DatagramSocket clientSocket = new DatagramSocket(9876);
        initComponents();
        RecvPacket recvProcess = new RecvPacket(clientSocket);
        Thread recvThread = new Thread(recvProcess);
        recvThread.start();
}

後でこのボタンで ActionPerformed:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    try {
        String passwordString = new String(passwordfield.getPassword());
        byte[] passwordBytes = passwordString.getBytes();
        byte[] packetData = new byte[1500];
        packetData = SendPacketHandler.packetConstructor(SendOpcodes.REGISTER_USER,usernamefield.getText(),EncryptionHandler.hashPassword(passwordBytes));
        DatagramPacket packet = new DatagramPacket(packetData,packetData.length,InetAddress.getByName("127.0.0.1"),9876);
        clientSocket.send(packet);
    } catch (NoSuchAlgorithmException | UnknownHostException | IOException ex) {
        Logger.getLogger(BookingClientUI.class.getName()).log(Level.SEVERE, null, ex);
    }

}    

明らかに、次の行:

        clientSocket.send(packet);

宣言された DatagramSocket がスコープ内にないため、「シンボルが見つかりません」というエラーが発生します。ただし、Java で数日間しかプログラミングしていないため、これを修正する方法がわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

1

ボタン ハンドラーが後でアクセスできるクラスのデータ メンバーにソケットを格納するだけです。クラス階層について、その方法を説明するのに十分な説明がありません。ボタン ハンドラーが 内BookingClientUIにある場合は、簡単です。次のようなものがあります。

public BookingClientUI() extends JFrame {

  final DatagramSocket clientSocket;

  public BookingClientUI() throws SocketException {
    // Initialize the data member with the open socket.
    clientSocket = new DatagramSocket(9876);
    initComponents();
    RecvPacket recvProcess = new RecvPacket(clientSocket);
    Thread recvThread = new Thread(recvProcess);
    recvThread.start();
  }

  // Any member function can now use clientSocket, including a button action.

}

このすべてにおいて、(ほぼ) すべての Swing コードは UI スレッドで実行する必要があることを忘れないでください。

于 2013-03-30T17:44:54.980 に答える