/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package klient2_gui;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Jakub
*/
public class Okienko extends javax.swing.JFrame {
public String message;
public final DatagramSocket receivingSocket;
byte[] server = new byte[]{(byte) 169, (byte) 254, (byte) 203, (byte) 150};
byte[] bufWysylany;
byte[] bufOdbierany;
public Okienko() throws SocketException {
this.receivingSocket = new DatagramSocket(5556);
initComponents();
}
private void initComponents() {
//usunąłem, bo zajmowało bardzo dużo miejsca
}
private void sendButtonActionPerformed(java.awt.event.ActionEvent evt) {
message = getTheText.getText();
bufWysylany = new byte[message.length()];
DatagramPacket packet = new DatagramPacket(bufWysylany, bufWysylany.length);
//displayText.setText(getTheText.getText() + "\n");
// String text = message.nextLine();
byte[] buffer = message.getBytes();
try {
InetAddress serverAdress = InetAddress.getByAddress(server);
DatagramSocket socket = new DatagramSocket();
socket.send(new DatagramPacket(buffer, buffer.length, serverAdress, 5555));
} catch (IOException e) {
System.err.println("e");
}
}
private void getTheTextActionPerformed(java.awt.event.ActionEvent evt) {
getTheText.getText();
}
private void receiveTextActionPerformed(java.awt.event.ActionEvent evt) {
odbieranie();
}
private void extiButtomActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
public void odbieranie() {
try {
bufOdbierany = new byte[50];
DatagramPacket packet = new DatagramPacket(bufOdbierany, bufOdbierany.length);
receivingSocket.receive(packet);
String response = new String(packet.getData(), 0, packet.getLength(), "UTF-8");
displayText.setText(response);
} catch (IOException e) {
System.exit(0);
System.err.println("e");
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
try {
new Okienko().setVisible(true);
} catch (SocketException ex) {
Logger.getLogger(Okienko.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
// Variables declaration - do not modify
public javax.swing.JTextArea displayText;
private javax.swing.JButton extiButtom;
public javax.swing.JTextField getTheText;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JButton receiveText;
public javax.swing.JButton sendButton;
// End of variables declaration
}
Metoda ** odbieranie()** , która ma zadanie odbierać dane klasy DatagramPacket od drugiego klienta poprzez serwer i konwertuje je na String i wyświetla w jTextArea.
Jest ona wywoływana w receiveTextActionPerformed, a w GUI poprzez konkretny przycisk.
Jak nietrudno się domyślić każde naciśnięcie powoduje wyświetlenie nadesłanej wiadomości.
I tu mam problem. Naciśnięcie kilkakrotnie przycisku, w sytuacji kiedy nie ma żadnej wiadomości powoduje zawieszenie programu.
Z czego to może wynikać?
wstawienie kodu do treści posta
- @furious programming