Witam!
Mam następujący problem. Gdy próbuje się połączyć z komputerem stojącym metr obok, wyrzucam mi java.lang.NullPointerException. Dodam, że korzystam z możliwości tworzenia interfejsu w NetBeans i gdy korzystałem z komunikatora z tym samym kodem, ale ręcznie robionym interfejsem ten błąd też wystepował, ale rzadziej i gdy łączę się sam ze sobą to wszystko działa. Załączam stacktrace:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at gaduła.GadułaView.sendInformation(GadułaView.java:324)
at gaduła.GadułaView.wyslij(GadułaView.java:363)
at gaduła.GadułaView.access$200(GadułaView.java:13)
at gaduła.GadułaView$2.actionPerformed(GadułaView.java:223)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
i kod aplikacji.
package gaduła;
import org.jdesktop.application.Action;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class GadułaView extends FrameView {
boolean working = true;
public class Connection extends Thread{
Socket socket;
JTextArea area;
Connection(Socket s, JTextArea ta)
{
socket = s;
area = ta;
}
void addText(String s)
{
area.setText(s + "\n" + pole.getText()+"\n");
java.awt.Toolkit.getDefaultToolkit().beep();
}
@Override
public void run()
{
try
{
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
while (true)
{
String str = in.readLine();
try {
if ( str.equals("END"))
{
System.out.println(" Nadeszlo polecenie zamkniecia połączenia !");
break;
}
this.addText(socket.getInetAddress() + " : " + str);
}
catch(NullPointerException e)
{
out.print(e);
}
}
}
finally
{
System.out.println("Połączenie zostało przerwane ....");
socket.close();
}
}
catch(IOException e)
{
przycisk2.setEnabled(false);
}
}
}
public class Server extends Thread
{
public static final int PORT = 80;
boolean working = true;
JTextArea area;
Server(JTextArea ta)
{
area = ta;
}
void addText(String s)
{
area.setText(s+"\n");
}
public void end()
{
working = false;
}
@Override
public void run()
{
while(working)
{
try
{
ServerSocket s = new ServerSocket(PORT);
try
{
System.out.println("Oczekuje na rozmowe ...");
Socket socket = s.accept();
Connection c = new Connection(socket, area);
c.start();
System.out.println("Rozmowa przyjeta - trwa ! port: " + socket.getPort());
}
catch(Exception e) //IO
{
}
}
catch(IOException e)
{
}
}
}
}
InetAddress addr;
Socket socket;
boolean test;
PrintWriter out;
public static final int PORT = 80;
String ip;
Server server;
public GadułaView(SingleFrameApplication app) {
super(app);
initComponents();
}
@Action
public void showAboutBox() {
if (aboutBox == null) {
JFrame mainFrame = GadułaApp.getApplication().getMainFrame();
aboutBox = new GadułaAboutBox(mainFrame);
aboutBox.setLocationRelativeTo(mainFrame);
}
GadułaApp.getApplication().show(aboutBox);
}
@SuppressWarnings("unchecked")
KOD WYGENEROWANY PRZEZ NETBEANS
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
mainPanel = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
area = new javax.swing.JTextArea();
jScrollPane2 = new javax.swing.JScrollPane();
jList1 = new javax.swing.JList();
pole = new javax.swing.JTextField();
przycisk3 = new javax.swing.JButton();
przycisk = new javax.swing.JButton();
przycisk2 = new javax.swing.JButton();
menuBar = new javax.swing.JMenuBar();
javax.swing.JMenu fileMenu = new javax.swing.JMenu();
javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem();
javax.swing.JMenu helpMenu = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem();
mainPanel.setName("mainPanel"); // NOI18N
jScrollPane1.setName("jScrollPane1"); // NOI18N
area.setColumns(20);
area.setRows(5);
area.setName("area"); // NOI18N
jScrollPane1.setViewportView(area);
area.setEditable(false);
jScrollPane2.setName("jScrollPane2"); // NOI18N
jList1.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "Kontakty (Jeszcze nie działa!!" };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; }
});
jList1.setName("jList1"); // NOI18N
jScrollPane2.setViewportView(jList1);
org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(gaduła.GadułaApp.class).getContext().getResourceMap(GadułaView.class);
pole.setText(resourceMap.getString("pole.text")); // NOI18N
pole.setName("pole"); // NOI18N
przycisk3.setText(resourceMap.getString("przycisk3.text")); // NOI18N
przycisk3.setName("przycisk3"); // NOI18N
przycisk3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
wyslij(evt);
}
});
przycisk.setText(resourceMap.getString("przycisk.text")); // NOI18N
przycisk.setName("przycisk"); // NOI18N
javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(gaduła.GadułaApp.class).getContext().getActionMap(GadułaView.class, this);
przycisk2.setAction(actionMap.get("sendInformation")); // NOI18N
przycisk2.setText(resourceMap.getString("przycisk2.text")); // NOI18N
przycisk2.setName("przycisk2"); // NOI18N
przycisk2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
polacz(evt);
}
});
javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
mainPanel.setLayout(mainPanelLayout);
mainPanelLayout.setHorizontalGroup(
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(pole, javax.swing.GroupLayout.DEFAULT_SIZE, 285, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 285, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(3, 3, 3))
.addGroup(mainPanelLayout.createSequentialGroup()
.addGap(36, 36, 36)
.addComponent(przycisk3, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(przycisk2)
.addGap(18, 18, 18)
.addComponent(przycisk, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
mainPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {przycisk, przycisk2, przycisk3});
mainPanelLayout.setVerticalGroup(
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.createSequentialGroup()
.addGap(5, 5, 5)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(mainPanelLayout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 188, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pole, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jScrollPane2))
.addGap(11, 11, 11)
.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(przycisk2)
.addComponent(przycisk)
.addComponent(przycisk3))
.addGap(92, 92, 92))
);
menuBar.setName("menuBar"); // NOI18N
fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N
fileMenu.setName("fileMenu"); // NOI18N
exitMenuItem.setAction(actionMap.get("quit")); // NOI18N
exitMenuItem.setText(resourceMap.getString("exitMenuItem.text")); // NOI18N
exitMenuItem.setName("exitMenuItem"); // NOI18N
fileMenu.add(exitMenuItem);
menuBar.add(fileMenu);
helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N
helpMenu.setName("helpMenu"); // NOI18N
jMenuItem1.setText(resourceMap.getString("jMenuItem1.text")); // NOI18N
jMenuItem1.setName("jMenuItem1"); // NOI18N
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
www(evt);
}
});
helpMenu.add(jMenuItem1);
aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N
aboutMenuItem.setText(resourceMap.getString("aboutMenuItem.text")); // NOI18N
aboutMenuItem.setName("aboutMenuItem"); // NOI18N
helpMenu.add(aboutMenuItem);
menuBar.add(helpMenu);
setComponent(mainPanel);
setMenuBar(menuBar);
}// </editor-fold>
KONIEC KODU WYGENEROWANEGO
private void sendInformation()
{
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
out.println(pole.getText());
if(in == null){System.out.print("in is null"); }
area.setText("Ja:" + pole.getText()+"\n");
pole.setText("");
}
catch(IOException e)
{
System.out.println("Problem z wyslaniem informacji ...");
System.out.println(e);
}
}
private void www(java.awt.event.ActionEvent evt) {
if (java.awt.Desktop.isDesktopSupported()) {
java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
if (desktop.isSupported(java.awt.Desktop.Action.BROWSE)) {
try {
desktop.browse(new URI("http://www.szymekdo.cba.pl"));
}
catch (IOException e) {
System.out.println(e);
}
catch (URISyntaxException e) {
System.out.println(e);
}
}
}
else {
// // TODO add your handling code here:
}
}
private void wyslij(java.awt.event.ActionEvent evt) {
sendInformation();
}
private void polacz(java.awt.event.ActionEvent evt) {
String ip=pole.getText();
if(przycisk2.getText().equals("Połącz"))
{
server = new Server(area);
server.start();
try
{
addr = InetAddress.getByName(ip);
System.out.println("=Lacze sie z komputerem o adresie : " + ip);
socket = new Socket(ip, PORT);
System.out.println("==Na porcie: " + socket.getPort());
test = true;
}
catch(Exception e)
{
przycisk2.setEnabled(true);
System.out.println(e);
test = false;
}
if (test){
przycisk.setEnabled(true);
przycisk2.setEnabled(false);
area.setText("");
}
else{
if(socket != null){
try {
socket.close();
} catch (IOException ex) {
System.out.print("Problem z zamknieciem socketu");
System.out.println(ex);
}
}
}}
}
// Variables declaration - do not modify
private javax.swing.JTextArea area;
private javax.swing.JList jList1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JPanel mainPanel;
private javax.swing.JMenuBar menuBar;
private javax.swing.JTextField pole;
private javax.swing.JButton przycisk;
private javax.swing.JButton przycisk2;
private javax.swing.JButton przycisk3;
// End of variables declaration
private JDialog aboutBox;
}