同学的一个文件传输程序,处理可以完成,但就是运行不出来~大家看看~偶要改好后的程序,谢谢了~急急急~ 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();}}
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();}}
解决方案 »
- Java正则表达式如何将\替换成\\
- 控制线程打印问题
- 一道面试题,没想到好的方法解决。
- 总是提示验证码不正确,请问如何
- java程序遇到了一点困难
- String类型的变量,怎么有时候用!=""判断可以,有时候怎么不对?
- Suspicious method call; should probably call "draw" rather than "onDraw"
- 求对.jar文件操作的代码(写入,读出),200分,可用即给分
- 200分求一个打印的例子我老也做不对(再线等待)
- 从字符串中解析参数的问题
- 1.5.0_09版本的jdk安装好后,找不到javac.exe文件
- 怎样输入一个字母,让程序结束
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();} }
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();
}}
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端口