新手请高手看看我这个文件传输程序!到底那里出问题了!!谢谢!!

时间:2021-12-18 11:24:01
希望可以详细解释一下那里出问题了!!!万分感谢!!!!



import java.awt.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
import java.awt.event.ActionListener;
import java.util.EventListener;
import java.awt.event.ActionEvent;

public class FileClielt implements ActionListener
{
JFrame jf = new JFrame("文件传输");
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JLabel jl = new JLabel("");
JTextArea jtxtip = new JTextArea("");
JButton jbopen = new JButton("打开");
JButton jbsave = new JButton("保存");
JButton jbsend = new JButton("发送");
JButton jbexit = new JButton("退出");

String openfile,savefile;
public void FileClielt()
{
//界面
jp1.setLayout(new BorderLayout());
jp1.add(jl,BorderLayout.CENTER);
jp1.add(jtxtip,BorderLayout.SOUTH);
jp2.setLayout(new GridLayout(2,2));
jp2.add(jbopen);
jp2.add(jbsave);
jp2.add(jbsend);
jp2.add(jbexit);
jf.setLayout(new BorderLayout());

jf.getContentPane().add(jp1,BorderLayout.CENTER);
jf.getContentPane().add(jp2,BorderLayout.SOUTH);
jbopen.addActionListener(this);
jbsend.addActionListener(this);
jbsave.addActionListener(this);
jbexit.addActionListener(this);
jf.setSize(300,200);
jf.show();






}
//接收文件
public void save()
{
try
{
//ServerSocket ss = new ServerSocket(4001);
Socket sa = new Socket("127.0.0.1",80);//ss.accept();
BufferedInputStream inn = new BufferedInputStream(sa.getInputStream());
FileOutputStream fout = new FileOutputStream(savefile);
System.out.print("save");
int i;
while((i = inn.read())!= -1)
{
fout.write(i);
}
sa.close();
inn.close();
fout.close();


}catch(Exception f1){System.out.print(f1.getMessage());}
}
public static void main(String[] args)
{
FileClielt fic = new FileClielt();
fic.FileClielt();

}

public void actionPerformed(ActionEvent e) {
if(e.getSource()==jbopen)
{
JFileChooser fcopen = new JFileChooser("C://");

     fcopen.setMultiSelectionEnabled(false);
     int result = fcopen.showOpenDialog(new JFrame());    
    
     if (result == JFileChooser.APPROVE_OPTION)
     {
       File[] f = fcopen.getSelectedFiles();
        for (int i = 0; i < f.length; i++)
          {
           openfile = f[i].getPath();
          }
     }
}
if(e.getSource()==jbsend)
{
//发送文件
try
{
Socket so = new Socket(jtxtip.getText(),80);
BufferedInputStream in = new BufferedInputStream(new FileInputStream(openfile));
int i;
PrintStream p = new PrintStream(so.getOutputStream());
System.out.print("send");
while((i = in.read())!= -1)
{
p.print(i);
}
so.close();
in.close();

}catch(Exception f){System.out.print(f.getMessage());}
}
if(e.getSource()==jbsave)
{
JFileChooser fcsave = new JFileChooser("C://");

     fcsave.setMultiSelectionEnabled(false);
     int result = fcsave.showSaveDialog(new JFrame());    
    
     if (result == JFileChooser.APPROVE_OPTION)
     {
       File[] f = fcsave.getSelectedFiles();
        for (int i = 0; i < f.length; i++)
          {
           savefile = f[i].getPath();
          }
     }
     this.save();
}
if(e.getSource()==jbexit)
{
System.exit(0);
}
}
}

7 个解决方案

#1


编译通过了吗?

#2


jf.setLayout(new BorderLayout());  这一句在j2se 1.4.2里是不赞成使用的,虽然能编译,但执行时报错:

java.lang.Error: Do not use javax.swing.JFrame.setLayout() use javax.swing.JFrame.getContentPane().setLayout() instead
at javax.swing.JFrame.createRootPaneException(JFrame.java:465)
at javax.swing.JFrame.setLayout(JFrame.java:531)
at test.FileClielt.FileClielt(FileClielt.java:35)
at test.FileClielt.main(FileClielt.java:71)
Exception in thread "main" 

改成下边这样:

jf.getContentPane().setLayout(new BorderLayout());

#3


通过!!也可以连接!!就是发的时候是null!!
帮忙看看!!!

#4


我运行可以的!!我的是1.5.0!!
界面那里不要理!!我只想知道为什么发不到文件啊!!帮忙再看看啊!!!

#5


发送这一段,so是远程的 socket, 可是你并没有写到那里去呀。

是不是应该加上两句

OutputStream soOutStream = so.getOutputStream() 
so.write(......);

#6


上面的错了,重写一遍:

发送这一段,so是远程的 socket, 可是你并没有写到那里去呀。

是不是应该加上两句

OutputStream soOutStream = so.getOutputStream() 
soOutStream.write(......);

#7


哦,是我没看清楚,你已经往p里写了。

#1


编译通过了吗?

#2


jf.setLayout(new BorderLayout());  这一句在j2se 1.4.2里是不赞成使用的,虽然能编译,但执行时报错:

java.lang.Error: Do not use javax.swing.JFrame.setLayout() use javax.swing.JFrame.getContentPane().setLayout() instead
at javax.swing.JFrame.createRootPaneException(JFrame.java:465)
at javax.swing.JFrame.setLayout(JFrame.java:531)
at test.FileClielt.FileClielt(FileClielt.java:35)
at test.FileClielt.main(FileClielt.java:71)
Exception in thread "main" 

改成下边这样:

jf.getContentPane().setLayout(new BorderLayout());

#3


通过!!也可以连接!!就是发的时候是null!!
帮忙看看!!!

#4


我运行可以的!!我的是1.5.0!!
界面那里不要理!!我只想知道为什么发不到文件啊!!帮忙再看看啊!!!

#5


发送这一段,so是远程的 socket, 可是你并没有写到那里去呀。

是不是应该加上两句

OutputStream soOutStream = so.getOutputStream() 
so.write(......);

#6


上面的错了,重写一遍:

发送这一段,so是远程的 socket, 可是你并没有写到那里去呀。

是不是应该加上两句

OutputStream soOutStream = so.getOutputStream() 
soOutStream.write(......);

#7


哦,是我没看清楚,你已经往p里写了。