同学的一个文件传输程序,处理可以完成,但就是运行不出来~大家看看~偶要改好后的程序,谢谢了~急急急~ Send.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;public class Send implements ActionListener{
    JFileChooser jc;
    JFrame f;
    Socket socket;
    DataInputStream din;
    DataOutputStream dout;
    JButton b1;
    JButton b2;
    TextArea txt;
    MenuBar menubar1;
    Menu menu1;
    MenuItem item1;
public Send() {
        //界面布局
        jc = new JFileChooser();
        f = new JFrame("文件发送");
        f.setLocation(100,100);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        menu1=new Menu("文件");
        item1=new MenuItem("打开");
        menubar1.add(menu1);
        menu1.add(item1);
        
        b1 = new JButton("发送",new ImageIcon("go.gif"));
        b2 = new JButton("取消",new ImageIcon("2.gif"));
        txt=new TextArea(10,40);
        JScrollPane scrollpane = new JScrollPane(txt);
        JPanel jp = new JPanel();
        jp.add(b1); jp.add(b2);
        Container c = f.getContentPane();
        c.add(jp,BorderLayout.NORTH);
        c.add(scrollpane, BorderLayout.CENTER);
        f.setSize(400,150);
        f.setVisible(true);
        item1.addActionListener(this); 
        b1.addActionListener(this); //监听按钮
        b2.addActionListener(this);
                }public void actionPerformed(ActionEvent e) //定义按钮事件
{  if(e.getSource()==item1) 
   { jc.showOpenDialog(f);//弹出文件选择对话框
   // SendFile send = new SendFile(jc.getSelectedFile());
     }
//}else if(e.getSource() == b1) 
   {
   // jc.showOpenDialog(f);//弹出文件选择对话框
    SendFile send = new SendFile(jc.getSelectedFile()); //线程对象
    send.start();//启动新的线程传递文件
    }else if(e.getSource()==b2){ //如果选择取消,则推出程序并且发出提示信息
             System.out.println("用户取消发送!"+"\n");
             System.exit(0);
                                 }
}class SendFile extends Thread{
  File file;//用户选择的文件public SendFile(File file) 
{   
    this.file = file;
    //初始化socket及其相关的输入输出流
try {
        socket = new Socket("localhost",4321);
        din = new DataInputStream(socket.getInputStream());
        dout = new DataOutputStream(socket.getOutputStream());
     } catch (IOException e) {e.printStackTrace();}
}public void run() {
       
 try {
     dout.writeUTF(file.getName()); //把文件名发送到接收方
     txt.append("开始发送文件:"+file.getName()+"\n");//文本区追加信息
     boolean isAccepted = din.readBoolean(); //判断接收方是否同意接收
     if(isAccepted){  //如果同意接收则开始发送文件
     txt.append("开始发送..."+"\n");
     BufferedInputStream fin = 
     new BufferedInputStream(new FileInputStream(file));
     byte[] buf = new byte[2048];
     int num = fin.read(buf);
     while(num != -1){
       dout.write(buf,0,num);
       dout.flush();
       num = fin.read(buf);
                      }
        fin.close();
        txt.append("发送完成:" + file.toString()+"\n");
                            }
      } catch (IOException e)  {e.printStackTrace();}   
 finally{
            try {
                din.close();
                dout.close();
                socket.close();
                } catch (IOException e) { e.printStackTrace(); }
         }
    }
}public static void main(String[] args) 
{new Send();}}

解决方案 »

  1.   

    import   javax.swing.*; 
    import   java.awt.*; 
    import   java.awt.event.*; 
    import   java.io.*; 
    import   java.net.*; public   class   Send   implements   ActionListener{ 
            JFileChooser   jc; 
            JFrame   f; 
            Socket   socket; 
            DataInputStream   din; 
            DataOutputStream   dout; 
            JButton   b1; 
            JButton   b2; 
            TextArea   txt; 
            MenuBar   menubar1; 
            Menu   menu1; 
            MenuItem   item1; 
    public   Send()   { 
                    //加上这个!!!!!
            menubar1=new MenuBar();
                    //界面布局 
                      jc   =   new   JFileChooser(); 
                    f   =   new   JFrame( "文件发送 "); 
                    f.setLocation(100,100); 
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
                    menu1=new   Menu( "文件 "); 
                    item1=new   MenuItem( "打开 "); 
                    menubar1.add(menu1); 
                    menu1.add(item1); 
                    //加上这个!!!!!!
                    f.setMenuBar(menubar1);
                    b1   =   new   JButton( "发送 ",new   ImageIcon( "go.gif ")); 
                    b2   =   new   JButton( "取消 ",new   ImageIcon( "2.gif ")); 
                    txt=new   TextArea(10,40); 
                    JScrollPane   scrollpane   =   new   JScrollPane(txt); 
                    JPanel   jp   =   new   JPanel(); 
                    jp.add(b1);   jp.add(b2); 
                    Container   c   =   f.getContentPane(); 
                    c.add(jp,BorderLayout.NORTH); 
                    c.add(scrollpane,   BorderLayout.CENTER); 
                    f.setSize(400,150); 
                    f.setVisible(true); 
                    item1.addActionListener(this);   
                    b1.addActionListener(this);   //监听按钮 
                    b2.addActionListener(this); 
                                    } public   void   actionPerformed(ActionEvent   e)   //定义按钮事件 
    {     if(e.getSource()==item1)   
          {   jc.showOpenDialog(f);//弹出文件选择对话框 
          //   SendFile   send   =   new   SendFile(jc.getSelectedFile()); 
              } 
    //} else   if(e.getSource()   ==   b1)   
          { 
          //   jc.showOpenDialog(f);//弹出文件选择对话框 
            SendFile   send   =   new   SendFile(jc.getSelectedFile());   //线程对象 
            send.start();//启动新的线程传递文件 
            }else   if(e.getSource()==b2){   //如果选择取消,则推出程序并且发出提示信息 
                              System.out.println( "用户取消发送! "+ "\n "); 
                              System.exit(0); 
                                                                      } 
    } class   SendFile   extends   Thread{ 
        File   file;//用户选择的文件 public   SendFile(File   file)   
    {       
            this.file   =   file; 
            //初始化socket及其相关的输入输出流 
    try   { 
                    socket   =   new   Socket( "localhost ",4321); 
                    din   =   new   DataInputStream(socket.getInputStream()); 
                    dout   =   new   DataOutputStream(socket.getOutputStream()); 
              }   catch   (IOException   e)   {e.printStackTrace();} 
    } public   void   run()   { 
                  
      try   { 
              dout.writeUTF(file.getName());   //把文件名发送到接收方 
              txt.append( "开始发送文件: "+file.getName()+ "\n ");//文本区追加信息 
              boolean   isAccepted   =   din.readBoolean();   //判断接收方是否同意接收 
              if(isAccepted){     //如果同意接收则开始发送文件 
              txt.append( "开始发送... "+ "\n "); 
              BufferedInputStream   fin   =   
              new   BufferedInputStream(new   FileInputStream(file)); 
              byte[]   buf   =   new   byte[2048]; 
              int   num   =   fin.read(buf); 
              while(num   !=   -1){ 
                  dout.write(buf,0,num); 
                  dout.flush(); 
                  num   =   fin.read(buf); 
                                                } 
                    fin.close(); 
                    txt.append( "发送完成: "   +   file.toString()+ "\n "); 
                                                            } 
                }   catch   (IOException   e)     {e.printStackTrace();}       
      finally{ 
                            try   { 
                                    din.close(); 
                                    dout.close(); 
                                    socket.close(); 
                                    }   catch   (IOException   e)   {   e.printStackTrace();   } 
                      } 
            } 
    } public   static   void   main(String[]   args)   
    {new   Send();} } 
      

  2.   


    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.TextArea;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedInputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.Socket;import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;public class Send implements ActionListener {
    JFileChooser jc; JFrame f; Socket socket; DataInputStream din; DataOutputStream dout; JButton b1; JButton b2; TextArea txt; JMenuBar menubar1; JMenu menu1; JMenuItem item1; public Send() {
    // 界面布局
    jc = new JFileChooser();
    f = new JFrame("文件发送 ");
    f.setLocation(100, 100);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    menu1 = new JMenu("文件 ");
    item1 = new JMenuItem("打开 ");
    menubar1 = new JMenuBar();
    menubar1.add(menu1);
    menu1.add(item1); b1 = new JButton("发送 ", new ImageIcon("go.gif "));
    b2 = new JButton("取消 ", new ImageIcon("2.gif "));
    txt = new TextArea(10, 40);
    JScrollPane scrollpane = new JScrollPane(txt);
    JPanel jp = new JPanel();
    jp.add(b1);
    jp.add(b2);
    Container c = f.getContentPane();
    c.add(jp, BorderLayout.NORTH);
    c.add(scrollpane, BorderLayout.CENTER);
    f.setSize(400, 150);
    f.setJMenuBar(menubar1);
    f.setVisible(true);
    item1.addActionListener(this);
    b1.addActionListener(this); // 监听按钮
    b2.addActionListener(this);
    } public void actionPerformed(ActionEvent e) // 定义按钮事件
    {
    if (e.getSource() == item1) {
    jc.showOpenDialog(f);// 弹出文件选择对话框
    // SendFile send = new SendFile(jc.getSelectedFile());
    }
    // } else if (e.getSource() == b1) {
    // jc.showOpenDialog(f);//弹出文件选择对话框
    SendFile send = new SendFile(jc.getSelectedFile()); // 线程对象
    send.start();// 启动新的线程传递文件
    } else if (e.getSource() == b2) { // 如果选择取消,则推出程序并且发出提示信息
    System.out.println("用户取消发送! " + "\n ");
    System.exit(0);
    }
    } class SendFile extends Thread {
    File file;// 用户选择的文件 public SendFile(File file) {
    this.file = file;
    // 初始化socket及其相关的输入输出流
    try {
    socket = new Socket("localhost ", 4321);
    din = new DataInputStream(socket.getInputStream());
    dout = new DataOutputStream(socket.getOutputStream());
    } catch (IOException e) {
    e.printStackTrace();
    }
    } public void run() { try {
    dout.writeUTF(file.getName()); // 把文件名发送到接收方
    txt.append("开始发送文件: " + file.getName() + "\n ");// 文本区追加信息
    boolean isAccepted = din.readBoolean(); // 判断接收方是否同意接收
    if (isAccepted) { // 如果同意接收则开始发送文件
    txt.append("开始发送... " + "\n ");
    BufferedInputStream fin = new BufferedInputStream(
    new FileInputStream(file));
    byte[] buf = new byte[2048];
    int num = fin.read(buf);
    while (num != -1) {
    dout.write(buf, 0, num);
    dout.flush();
    num = fin.read(buf);
    }
    fin.close();
    txt.append("发送完成: " + file.toString() + "\n ");
    }
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    din.close();
    dout.close();
    socket.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    } public static void main(String[] args) {
    new Send();
    }}
      

  3.   

    import   javax.swing.*;
    import   java.awt.*;
    import   java.awt.event.*;
    import   java.io.*;
    import   java.net.*;public   class   Send   implements   ActionListener{
            JFileChooser   jc;
            JFrame   f;
            Socket   socket;
            DataInputStream   din;
            DataOutputStream   dout;
            JButton   b1;
            JButton   b2;
            TextArea   txt;
            MenuBar   menubar1;
            Menu   menu1;
            MenuItem   item1;
    public   Send()   {
                    //界面布局
                    jc   =   new   JFileChooser();
                    f   =   new   JFrame( "文件发送 ");
                    f.setLocation(100,100);
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
                    menu1=new   Menu( "文件 ");
                    item1=new   MenuItem( "打开 ");
                    menubar1=new MenuBar();
                    menubar1.add(menu1);
                    menu1.add(item1);
                   
                  b1   =   new   JButton( "发送 ",new   ImageIcon( "go.gif "));
                   b2   =   new   JButton( "取消 ",new   ImageIcon( "2.gif "));
                    txt=new   TextArea(10,40);
                    JScrollPane   scrollpane   =   new   JScrollPane(txt);
                    JPanel   jp   =   new   JPanel();
                    jp.add(b1);   jp.add(b2);
                    Container   c   =   f.getContentPane();
                    c.add(jp,BorderLayout.NORTH);
                    c.add(scrollpane,   BorderLayout.CENTER);
                    f.setMenuBar(menubar1);
                    f.setSize(400,150);
                    f.setVisible(true);
                    item1.addActionListener(this);  
                    b1.addActionListener(this);   //监听按钮
                    b2.addActionListener(this);
                                    }public   void   actionPerformed(ActionEvent   e)   //定义按钮事件
    {     if(e.getSource()==item1)  
          {   jc.showOpenDialog(f);//弹出文件选择对话框
          //   SendFile   send   =   new   SendFile(jc.getSelectedFile());
              }
    //}else   if(e.getSource()   ==   b1)  
          {
          //   jc.showOpenDialog(f);//弹出文件选择对话框
            SendFile   send   =   new   SendFile(jc.getSelectedFile());   //线程对象
            send.start();//启动新的线程传递文件
            }else   if(e.getSource()==b2){   //如果选择取消,则推出程序并且发出提示信息
                              System.out.println( "用户取消发送! "+ "\n ");
                              System.exit(0);
                                                                      }
    }class   SendFile   extends   Thread{
        File   file;//用户选择的文件public   SendFile(File   file)  
    {      
            this.file   =   file;
            //初始化socket及其相关的输入输出流
    try   {
                    socket   =   new   Socket( "127.0.0.1",10000);
                    din   =   new   DataInputStream(socket.getInputStream());
                    dout   =   new   DataOutputStream(socket.getOutputStream());
              }   catch   (IOException   e)   {e.printStackTrace();}
    }public   void   run()   {
                 
      try   {
              dout.writeUTF(file.getName());   //把文件名发送到接收方
              txt.append( "开始发送文件: "+file.getName()+ "\n ");//文本区追加信息
              boolean   isAccepted   =   din.readBoolean();   //判断接收方是否同意接收
              if(isAccepted){     //如果同意接收则开始发送文件
              txt.append( "开始发送... "+ "\n ");
              BufferedInputStream   fin   =  
              new   BufferedInputStream(new   FileInputStream(file));
              byte[]   buf   =   new   byte[2048];
              int   num   =   fin.read(buf);
              while(num   !=   -1){
                  dout.write(buf,0,num);
                  dout.flush();
                  num   =   fin.read(buf);
                                                }
                    fin.close();
                    txt.append( "发送完成: "   +   file.toString()+ "\n ");
                                                            }
                }   catch   (IOException   e)     {e.printStackTrace();}      
      finally{
                            try   {
                                    din.close();
                                    dout.close();
                                    socket.close();
                                    }   catch   (IOException   e)   {   e.printStackTrace();   }
                      }
            }
    }public   static   void   main(String[]   args)  
    {new   Send();}} 这样就可以了。当然你要在socket的另一端保证你指定的10000端口是开放的,否则会出现链接被拒绝的异常。
    也就是在127.0.0.1上启动一个程序或者服务来监听10000端口