本人想做个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);
}
}
运行结果是界面可以显示,但是点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);
}
}
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)
好像LooksAndFeel没用到啊..
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();
}
}
}