本人想做个WINDOWS与LINUX下的文件通讯//程序写的不好,还望大家帮帮忙
运行结果是界面可以显示,但是点Browser按钮没反应,出现一大堆错误:java.lang.NullPointerException
    at ......好多啊
下面是原代码:
RPanel.java
package cn.edu.fjnu;import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.*;public class RPanel extends JPanel 
{
private JTextField savename;
private JLabel jl;
private JButton browser;
private JButton start, stop;
private JTextArea state;
private JScrollPane js;
private Socket c = null;
private ServerSocket server = null;
private final int port = 20516;
private JFileChooser fileChooser;


public RPanel() 
{
jl=new JLabel("input the main directory: ");
jl.setForeground(Color.white);

savename = new JTextField(20);// main directory
//savename.setEditable(false);
savename.setText("./");

start = new JButton("start");  //start service button
start.addActionListener(new startListener());// add start button listener

browser=new JButton("Browser");
browser.addActionListener(new dirListener());

stop = new JButton("cancel"); //stop service button
stop.addActionListener(new stopListener());// add stop button listener
stop.setEnabled(false);

state = new JTextArea("Message:\n",12,30);
js=new JScrollPane(state);

add(jl);
add(savename);
add(browser);
add(start);
add(stop);
add(js);

setPreferredSize(new Dimension(360, 350));
setBackground(Color.black);
}

private class startListener implements ActionListener 
{
public void actionPerformed(ActionEvent event) 
{
new Thread(new runServer()).start();
start.setEnabled(false);
stop.setEnabled(true); }
}
private class stopListener implements ActionListener 
{
public void actionPerformed(ActionEvent event) 
{
try {
start.setEnabled(true);
stop.setEnabled(false);
server.close();
} catch (IOException exs) {
exs.printStackTrace();
}
}
}
private class dirListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
try{
fileChooser= new JFileChooser();
            fileChooser.setFileSelectionMode(fileChooser.DIRECTORIES_ONLY);             int n = fileChooser.showOpenDialog(null);
            if(n == fileChooser.APPROVE_OPTION)
            {
             savename.setText(fileChooser.getSelectedFile().getPath()+"\\");
            }
}
catch (Exception ex) {
            ex.printStackTrace();
}
}
}
private class runServer extends Thread 
{
public void run() 
{
try 
{
server = new ServerSocket(port);
state.append("Port:" + port + "\n");
state.append("Connect......\n");

while (true) 
{
c = server.accept(); state.append("please wait client's message...\n");
new Thread(new Servicer(c, savename.getText())).start();
}

catch (IOException e) 
{
e.printStackTrace();

finally 
{
try 
{
server.close();
state.append("ServerSocket Close\n");
} catch (IOException exs) {
exs.printStackTrace();
}
}
}
}
class Servicer implements Runnable {
Socket client = null;
String fileName = null; Servicer(Socket client, String fileName) {
this.client = client;
this.fileName = fileName;
} public void run() {
DataInputStream dis = null;
DataOutputStream dos = null;
FileOutputStream fos = null;
byte name[]=new byte[128];
char n[]=new char[128];
String str="";
int i=0,j=0;
try {

InputStream ips = client.getInputStream();
dos = new DataOutputStream(new BufferedOutputStream(fos));
char iso='/';//用来分割文件名和文件内容
int intiso=(int)iso;
while((i=ips.read())!=intiso)
name[j++]=(byte)i;
j=0;
while(name[j]!='\0'){
n[j]=(char)name[j];
str+=n[j];
j++;
}//到这边是获取文件名到str
fos = new FileOutputStream(fileName+str);
while((i=ips.read())!=-1)
{
fos.write(i);
}
state.append(str+"Transmission complete.\n");
fos.close();
c.close();
} catch (FileNotFoundException fe) {
fe.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
dis.close();
dos.close();
} catch (IOException ex) {
}
}
}
}
}MainPanel.java
package cn.edu.fjnu;import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;public class MainPanel {
public static void main(String[] args) {
/* 创建可视化窗口*/
JFrame frame = new JFrame("Transportoring");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /*创建接收端界面*/
RPanel recivep = new RPanel(); JPanel panel = new JPanel();
panel.add(recivep); frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}

解决方案 »

  1.   

    java.lang.NullPointerException
    at javax.swing.plaf.metal.MetalFileChooserUI$IndentIcon.getIconWidth(MetalFileChooserUI.java:881)
    at javax.swing.SwingUtilities.layoutCompoundLabelImpl(SwingUtilities.java:945)
    at javax.swing.SwingUtilities.layoutCompoundLabel(SwingUtilities.java:872)
    at javax.swing.plaf.basic.BasicLabelUI.layoutCL(BasicLabelUI.java:65)
    at javax.swing.plaf.basic.BasicLabelUI.getPreferredSize(BasicLabelUI.java:228)
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1652)
    at javax.swing.plaf.basic.BasicListUI.updateLayoutState(BasicListUI.java:1345)
    at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(BasicListUI.java:1293)
    at javax.swing.plaf.basic.BasicListUI$Handler.valueChanged(BasicListUI.java:2598)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:187)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:214)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:408)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:417)
    at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:441)
    at javax.swing.JList.setSelectedIndex(JList.java:2088)
    at javax.swing.plaf.basic.BasicComboPopup.setListSelection(BasicComboPopup.java:1119)
    at javax.swing.plaf.basic.BasicComboPopup.access$300(BasicComboPopup.java:46)
    at javax.swing.plaf.basic.BasicComboPopup$Handler.itemStateChanged(BasicComboPopup.java:957)
    at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1172)
    at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1229)
    at javax.swing.JComboBox.contentsChanged(JComboBox.java:1276)
    at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:100)
    at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.setSelectedItem(MetalFileChooserUI.java:1000)
    at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.addItem(MetalFileChooserUI.java:971)
    at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.access$800(MetalFileChooserUI.java:900)
    at javax.swing.plaf.metal.MetalFileChooserUI.doDirectoryChanged(MetalFileChooserUI.java:651)
    at javax.swing.plaf.metal.MetalFileChooserUI.access$1100(MetalFileChooserUI.java:36)
    at javax.swing.plaf.metal.MetalFileChooserUI$5.propertyChange(MetalFileChooserUI.java:737)
    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:338)
    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:275)
    at java.awt.Component.firePropertyChange(Component.java:7688)
    at javax.swing.JFileChooser.setCurrentDirectory(JFileChooser.java:563)
    at javax.swing.JFileChooser.<init>(JFileChooser.java:333)
    at javax.swing.JFileChooser.<init>(JFileChooser.java:285)
    at cn.edu.fjnu.RPanel$dirListener.actionPerformed(RPanel.java:86)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1957)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2278)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:377)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:232)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
    at java.awt.Component.processMouseEvent(Component.java:5955)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3285)
    at java.awt.Component.processEvent(Component.java:5720)
    at java.awt.Container.processEvent(Container.java:1960)
    at java.awt.Component.dispatchEventImpl(Component.java:4365)
    at java.awt.Container.dispatchEventImpl(Container.java:2018)
    at java.awt.Component.dispatchEvent(Component.java:4195)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4222)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3886)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3816)
    at java.awt.Container.dispatchEventImpl(Container.java:2004)
    at java.awt.Window.dispatchEventImpl(Window.java:2210)
    at java.awt.Component.dispatchEvent(Component.java:4195)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
      

  2.   

    第一次发贴就这长代码,佩服...
    好像LooksAndFeel没用到啊..
      

  3.   

    我想应该是这里面出了问题吧
    private class dirListener implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
    {
    try{
    fileChooser= new JFileChooser();
                fileChooser.setFileSelectionMode(fileChooser.DIRECTORIES_ONLY);            int n = fileChooser.showOpenDialog(null);
                if(n == fileChooser.APPROVE_OPTION)
                {
                savename.setText(fileChooser.getSelectedFile().getPath()+"\\");
                }
    }
    catch (Exception ex) {
                ex.printStackTrace();
    }
    }
    }