UDP w javie

0

Witam chciałem spróbować przepisać serwer UDP na aplikacje GUI w javeie jednak występują jakieś komplikacje. Z racji, że jestem nowy w javie to nie rozumiem tych błędów i prosił bym o pomoc, jak i wskazanie błędu. Dziękuję.

bledy:

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
package serwer;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.awt.event.ActionEvent;

import java.io.*;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class serwer {

	private JFrame frame;
	private JTextField textField;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					serwer window = new serwer();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public serwer() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);
		
		JButton btnNewButton = new JButton("New button");
		

		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				DatagramSocket sock = null;
		
		try
	    {
	        //1. creating a server socket, parameter is local port number
	        sock = new DatagramSocket(7777);
	         
	        //buffer to receive incoming data
	        byte[] buffer = new byte[65536];
	        DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
	         
	        //2. Wait for an incoming data
	        textField.setText("Server socket created. Waiting for incoming data...");
	
	         
	        //communication loop
	        while(true)
	        {
	            sock.receive(incoming);
	            byte[] data = incoming.getData();
	            String s = new String(data, 0, incoming.getLength());
	             
	            //echo the details of incoming data - client ip : client port - client message
	            textField.setText(incoming.getAddress().getHostAddress() + " : " + incoming.getPort() + " - " + s);
	             
	            s = "OK : " + s;  
	           
	        }
	    }
	     
	    catch(IOException e)
	    {
	        System.err.println("IOException " + e);
	    }
		
		
		
		
		
		
		
				
				
			
			}
		});
		
		
		btnNewButton.setBounds(15, 38, 115, 29);
		frame.getContentPane().add(btnNewButton);
		
		JLabel lblNewLabel = new JLabel("New label");
		lblNewLabel.setBounds(31, 142, 69, 20);
		frame.getContentPane().add(lblNewLabel);
		
		textField = new JTextField();
		textField.setBounds(15, 187, 146, 26);
		frame.getContentPane().add(textField);
		textField.setColumns(10);
	}

}
0

Problem polega na tym ze odwołujesz się do obiektu który nie jest stworzony. Posiadasz zmienną:

private JTextField textField;

Powinno być stworzenie obiektu, byś mógł ustawiać na nim tekst. Aktualnie tworzysz obiekt po ActionEvent - powinno być przed.

0
  public void actionPerformed(ActionEvent **e**) {

 
 catch(IOException e)
        {
            System.err.println("IOException " + **e**);
        }

Dwa razy wystepuje parametr "e"

1 użytkowników online, w tym zalogowanych: 0, gości: 1