Wątek przeniesiony 2017-06-18 09:42 z Java przez Patryk27.

Niezrozumiałe komunikaty błędów

0

Uczę się pisania programów w Javie i nie mam jeszcze pojęcia o naprawie błędów w trakcie pisania kodu. Przepisuje program z książki Java - ćwiczenia zaawansowane i Eclipce podkreśliło mi trzy błędy. Poniżej zamieszczam kod przepisany z książki i proszę o podpowiedz co z tymi błędami zrobić.

Opis błędów wyświetlanych w Eclipse:
Błąd nr 1 tak jest opisany:
Multiple markers at this line
*- The type ChatClient must implement the inherited abstract method *
ActionListener.actionPerformed(ActionEvent)
- The serializable class ChatClient does not declare a static final serialVersionUID field of type long

Błąd nr 2 tak jest opisany:
The method exitClicked() is undefined for the type new WindowAdapter(){}

Błąd nr 3 tak jest opisany:
The method keyPressed(KeyEvent) in the type new KeyAdapter(){} is not applicable for the arguments (int)

Poniżej jest niepełny listing tego programu, strzałkami z boku zaznaczyłem miejsce wystąpienia błędów.


package bootcamp;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ChatClient extends JFrame implements ActionListener{    <-- w tej linii słowo ChatClient w Eclipse podkreślone jest jako błąd nr 1

	protected DefaultListModel<String> dlm;
	protected JList lstNicks;
	protected JTextArea taMain;
	protected JTextField tfCommand;
	protected JButton btnConnect;
	protected JButton btnDisconnect;
	protected JButton btnExit;
	
	public ChatClient(){
		super("ChatClient");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		addWindowListener(new WindowAdapter (){
			public void windowClosing(WindowEvent e){
				exitClicked();          <-- w tej linii słowo exitClicked() w Eclipse podkreślone jest jako błąd nr 2
			}
		});
		initLayout();
		setVisible(true);
	}
	public void initLayout(){
		setSize(650,520);
		setResizable(false);
		setLayout(null);
		
		taMain = new JTextArea();
		taMain.setEditable(false);
		JScrollPane panelLeft = new JScrollPane(taMain);
		panelLeft.setBounds(10,20,480,360);
		add(panelLeft);
		
		dlm = new DefaultListModel<String>();
		lstNicks = new JList<String>(dlm);
		JScrollPane panelRight = new JScrollPane(lstNicks);
		panelRight.setBounds(500,20,130,360);
		add(panelRight);
		
		JPanel panelBottom1 = new JPanel();
		panelBottom1.setLayout(new BorderLayout());
		panelBottom1.setBounds(10,395,620,25);
		add(panelBottom1);
		
		JPanel panelBottom2 = new JPanel();
		panelBottom2.setLayout(new GridLayout());
		panelBottom2.setBounds(10,430,620,35);
		add(panelBottom2);
		
		tfCommand = new JTextField();
		tfCommand.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent evt){
				keyPressed(evt.getKeyCode());       <-- w tej linii słowo keyPressed w Eclipse podkreślone jest jako błąd nr 3
			}
		});
		panelBottom1.add(tfCommand);
		
		
		btnConnect = new JButton("Połącz");
		btnConnect.setActionCommand("Connect");
		btnConnect.addActionListener(this);
		panelBottom2.add(btnConnect);
		
		btnDisconnect = new JButton("Rozłącz");
		btnDisconnect.setActionCommand("Disconnect");
		btnDisconnect.addActionListener(this);
		panelBottom2.add(btnDisconnect);
		
	}
	
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable(){
			public void run(){
				
			}
		});
	}
	
}

0

Ech, przecież wszystko jest napisane w tych komunikatach, jasno i logicznie. A poza tym ściągnij IntelliJ i wywal eclipsa

0

Cześć, napisałem że zaczynam pisać programy w Javie i każdy błąd przy kompilacji jest dla mnie nie zrozumiały. Jak piszę program w Delphi, to każdy komunikat kompilatora jest dla mnie zrozumiały. Więc zadaje pytanie na forum i liczę na pomoc rzeczową. Skoro używam Eclipse to też zrozum że źródła z których korzystam też podają mi przykłady wykonane w Eclipse i dla tego z niego korzystam. Na wybór środowiska jeszcze mam czas i jest to następny krok w moim postępowaniu. Jeśli wiesz o co chodzi z tymi błędami to mi napisz, a będę bardzo wdzięczny za pomoc.
Pozdrawiam Marcin

0
  1. Twoja klasa ChatClient implementuje interfejs ActionListener, więc MUSI mieć metodę actionPerformed; implementacja interfejsu wymaga zaimplementowania wszystkich jego metod;
  2. Metoda exitClicked() nie jest zdefiniowana dla WindowAdapter, więc nie możesz jej użyć w tym kontekście;
  3. Nie wiem czy nie próbujesz tutaj zrobić czegoś takiego jak wyżej i odwołać się do metody nie pochodzącej z tej klasy (choć to klasa wewnętrzna) i masz tutaj wywołanie innej metody (?) o tej samej nazwie, ale on próbuje uruchomić sam siebie - jednak sam oczekuje innego typu parametrów.
0

No dobra, dla przykładu:

The type ChatClient must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent)

Przecież tu jest dokładnie napisane :
Jest twoja klasa ChatClient, która musi zaimplementować abstrakcyjną metodę z klasy ActionLitener, widać tego nie zrobiłeś. Trudno o bardziej zrozumiały komunikat. Jestem ciekawy tylko czy znasz składnie Javy czy po prostu programujesz metodą "na stackoverflow", przepisując gotowy teksts z jakiegoś tutoriala

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