Erro em classe principal java

Caros amigos

sou iniciante na área de programação embora eu tenha ja participados de outros cursos de programação, ainda possuo muitas falhas na hora de programar.
Realizando um exercício encontrei uma certa dificuldade na hora de executar meu codigo:

CLASSE APLICATIVO

package chat ;

import javax.swing.JOptionPane;

public class APLICATIVO {
public static void main (String[] args) {
String IP = (String)JOptionPane.showInputDialog(“INFORME O IP DESEJADO”,“10.12.0.”);
int PORTA = Integer.parseInt(JOptionPane.showInputDialog(“CONFIRME A PORTA”, “5000”));

    CONEXAO c = new CONEXAO(IP, PORTA);
    
    JANELA j = new JANELA(c);
    j.setLocationRelativeTo(null);
    j.setVisible (true);
    
}

}

CLASSE JANELA

package chat;

import java.awt.event.KeyEvent;
import java.util.Observable;
import java.util.Observer;

public class JANELA extends javax.swing.JFrame implements Observer{
private CONEXAO conexao;

public JANELA (CONEXAO conexao) {
super(“Chat//suporte//Jean-Kosmo”);
this.conexao = conexao;
initComponents();
conexao.addObserver(this);
escreve(“Iniciando chat com” + conexao.getIP()+ “:” + conexao.getPORTA());
mensagemjTextArea.requestFocusInWindow();
}

private void ENVIAR() {
    if (!mensagemjTextArea.getText().isEmpty()) {
        conexao.ENVIAR(mensagemjTextArea.getText());
        escreve("Você digitou: "+mensagemjTextArea.getText());
        mensagemjTextArea.setText("");
    }
}

private void escreve(String texto){
    chatjTextArea.append(texto+"\n");
     if (!chatjTextArea.getText().isEmpty() && !chatjTextArea.isFocusOwner()) {
            chatjTextArea.setCaretPosition(chatjTextArea.getText().length() - 1);
        }
    
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    chatjTextArea = new javax.swing.JTextArea();
    jScrollPane2 = new javax.swing.JScrollPane();
    mensagemjTextArea = new javax.swing.JTextArea();
    enviarjButton = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    chatjTextArea.setEditable(false);
    chatjTextArea.setColumns(20);
    chatjTextArea.setRows(5);
    jScrollPane1.setViewportView(chatjTextArea);

    mensagemjTextArea.setColumns(20);
    mensagemjTextArea.setRows(5);
    mensagemjTextArea.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyReleased(java.awt.event.KeyEvent evt) {
            mensagemjTextAreaKeyReleased(evt);
        }
    });
    jScrollPane2.setViewportView(mensagemjTextArea);

    enviarjButton.setText("Enviar");
    enviarjButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            enviarjButtonActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jScrollPane1)
        .addGroup(layout.createSequentialGroup()
            .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 386, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(enviarjButton, javax.swing.GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 349, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(jScrollPane2)
                .addComponent(enviarjButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addGap(0, 0, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>                        

private void enviarjButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
    ENVIAR();
}                                             

private void mensagemjTextAreaKeyReleased(java.awt.event.KeyEvent evt) {                                              
     if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
        ENVIAR();
    }
}                                             

// Variables declaration - do not modify                     
private javax.swing.JTextArea chatjTextArea;
private javax.swing.JButton enviarjButton;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextArea mensagemjTextArea;
// End of variables declaration                   

@Override
public void update(Observable o, Object arg) {
    escreve(conexao.getTEXTO());
}

}

CLASSE CONEXAO

/*

  • 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 chat;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Observable;
import java.util.logging.Level;
import java.util.logging.Logger;

public class CONEXAO extends Observable{

private String IP;
private int PORTA;
private String TEXTO;

public CONEXAO(String IP, int PORTA) {
    this.IP = IP;
    this.PORTA = PORTA;
    new Thread(new Recebe()).start();
}

public String getTEXTO() {
    return TEXTO;
}

public String getIP() {
    return IP;
}

public int getPORTA() {
    return PORTA;
}

public void ENVIAR(String texto) {
    new Thread(new ENVIAR(texto)).start();
}

public void notifica(String TEXTO) {
    this.TEXTO = TEXTO;
    setChanged();
    notifyObservers();
}

class Recebe implements Runnable {

    byte[] dadosReceber = new byte[255];
    boolean erro = false;
    DatagramSocket socket = null;

    @Override
    public void run() {
        while (true) {
            try {
                socket = new DatagramSocket(getPORTA());
            } catch (SocketException ex) {
                Logger.getLogger(CONEXAO.class.getName()).log(Level.SEVERE, null, ex);
            }
            erro = false;
            while (!erro) {
                DatagramPacket pacoteRecebido = new DatagramPacket(dadosReceber, dadosReceber.length);
                try {
                    socket.receive(pacoteRecebido);
                    byte[] b = pacoteRecebido.getData();
                    String s = "";
                    for (int i = 0; i < b.length; i++) {
                        if (b[i] != 0) {
                            s += (char) b[i];
                        }
                    }
                    String nome = pacoteRecebido.getAddress().toString() + " DIGITOU:";
                    notifica(nome + s);
                } catch (Exception e) {
                    System.out.println("erro");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(CONEXAO.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    erro = true;
                    continue;
                }
            }
        }
    }
}

class ENVIAR implements Runnable {

    String texto;

    public ENVIAR(String texto) {
        this.texto = texto;
    }

    @Override
    public void run() {

        byte[] dados = texto.getBytes();

        try {
            DatagramSocket clientSocket = new DatagramSocket();
            InetAddress addr = InetAddress.getByName(getIP());
            DatagramPacket pacote = new DatagramPacket(dados, dados.length, addr, getPORTA());
            clientSocket.send(pacote);
            clientSocket.close();
        } catch (SocketException ex) {
            Logger.getLogger(CONEXAO.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnknownHostException ex) {
            Logger.getLogger(CONEXAO.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(CONEXAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

}

+porem na hora de executar o codigo surge uma janela infomando

!a classe APLICATIVO nao foi encontrada no projetor CHAT.

gostaria de uma explicação em relação esse tipo de situação.

Primeiro de tudo, obedeça as convenções de código do Java, pode parecer firula/besteira mas ajuda e muito na legibilidade do código e a evitar erros grotescos como estes:

public void ENVIAR(String texto) {
  new Thread(new ENVIAR(texto)).start();
}

Uma método com o mesmo nome de uma classe? que loucura é esta?

public CONEXAO(String IP, int PORTA){
 this.IP = IP;
 this.PORTA = PORTA;
 new Thread(new Recebe()).start();
}

Engraçado que aqui Recebe está com a grafia correta.

Como anteriormente dito não tenho habilidades de programação,

#Uma método com o mesmo nome de uma classe? que loucura é esta?..

os maiores gênios da história da humanidade começaram com suas loucuras até conseguirem exito em suas empreitadas…

Enfim estou buscando desenvolver sem erros…

rs abaixa essa bola ai “gênio”

Então, saber nomear seus métodos, variáveis, etc e seguir as convenções de código ajuda a evitar erros e ser novato em programação não é desculpa pra isso, muito pelo contrário, você ta retirando um possível impecilho do seu caminho.

Como diz o ditado: é impossível encher um copo que já se encontra cheio. ‘Boa Sorte’ pq depois dessa sua resposta imbecil eu sinceramente to nem um pouco afim de queimar a minha mufa pra resolver seu problema.

#rs abaixa essa bola ai “gênio”.