Se ti riferisci al codice presente all'interno di NewJFrame questo è codice autogenerato da Netbeans in seguito alla creazione di un'interfaccia grafica con gli appositi strumenti messi a disposizione.
Attualmente compila e va tutto a buon fine con
codice:
public NewJFrame() {
Server objS=new Server();
initComponents();
objS.passa(jTextArea1);
}
a runtime non appena nella classe Server si arriva al punto in cui c'è il comando
codice:
jTextArea.append("XXXX");
mi segnala il java.lang.NullPointerException.
Posto tutto il codice per completezza:
codice:
package chat_v1c;
import java.net.*;
import java.io.*;
public class Chat_v1c
{
public static void main(String[] args) throws InterruptedException
{
Server objS=new Server();
objS.start();
NewJFrame objG=new NewJFrame();
objG.setVisible(true);
}
}
codice:
package chat_v1c;
import java.net.*;
import java.io.*;
public class Server extends Thread
{
BufferedReader dalClient;
PrintWriter alClient;
javax.swing.JTextArea jTextArea;
public void passa(javax.swing.JTextArea a)
{
this.jTextArea=a;
}
public Server(){}
@Override
public void run()
{
String text="";
Socket clientSocket=null;
ServerSocket serverSocket=null;
try
{
serverSocket=new ServerSocket(5555);
clientSocket = serverSocket.accept();
dalClient=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
alClient = new PrintWriter(clientSocket.getOutputStream(), true);
while(!text.equals("bye"))
{
text=dalClient.readLine();
System.out.println("ECCOMI!");
System.out.println(clientSocket.getInetAddress() + "Said: " + text + "\n");
jTextArea.append(clientSocket.getInetAddress() + "Said: " + text + "\n");
}
alClient.print(clientSocket.getInetAddress()+ "Disconnected!");
serverSocket.close();
System.out.println("FFFUORII");
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
codice:
package chat_v1c;
import java.net.*;
import java.io.*;
public class Client
{
Socket s1;
PrintWriter alServer;
BufferedReader dalServer;
String text;
//BufferedReader t = new BufferedReader(new InputStreamReader(System.in));
public void connectToSocket()
{
try
{
s1 = new Socket ("169.254.100.208",5555);
System.out.print("Connection with "+s1.getInetAddress()+" establised! \n");
alServer= new PrintWriter(s1.getOutputStream(),true);
dalServer = new BufferedReader(new InputStreamReader(s1.getInputStream()));
}
catch(IOException e)
{
System.out.println(e);
}
}
public void sendToServer(String text)
{
this.text=text;
alServer.println(text);
}
}
codice:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package chat_v1c;
/**
*
* @author fabrizio
*/
public class NewJFrame extends javax.swing.JFrame {
/**
* Creates new form NewJFrame
*/
int i=0;
Client objC=new Client();
public NewJFrame() {
Server objS=new Server();
initComponents();
objS.passa(jTextArea1);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
jTextField1 = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("Send");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 380, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(0, 8, Short.MAX_VALUE))
.add(layout.createSequentialGroup()
.add(jTextField1)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jButton1)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 186, Short.MAX_VALUE)
.add(18, 18, 18)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
.add(jButton1)
.add(61, 61, 61))
.add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
.add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 75, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap())))
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(i==0)
{
//objS.pass(jTextArea1);
objC.connectToSocket();
objC.sendToServer(jTextField1.getText());
i=i+1;
}
else
{
objC.sendToServer(jTextField1.getText());
}
}
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/*
* Set the Nimbus look and feel
*/
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/*
* If Nimbus (introduced in Java SE 6) is not available, stay with the
* default look and feel. For details see
* http://download.oracle.com/javase/tu...feel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
}