我正在尝试通过Android中的Java套接字实现文件传输。 它工作正常,但当我关闭应用程序时,它崩溃,控制台显示nullPointerException。 我已经尝试了一切,但无法找到问题! 我已经将ServerSocket定义为类变量,并在检查服务器套接字的状态后将其关闭在onDestroy()方法中。 这是我的代码:

package com.vinit.airdrive;

import java.io.BufferedInputStream;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.ArrayList;

import android.annotation.SuppressLint;

import android.app.Activity;

import android.os.Bundle;

import android.os.Environment;

import android.util.Log;

//Latest saved stub

@SuppressLint("SdCardPath")

public class MainActivity extends Activity {

Socket socket=null;

ServerSocket serversocket=null;

ArrayList fileArray=null;

@SuppressLint("SdCardPath")

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

File file1=new File(Environment.getExternalStorageDirectory()+"/airdrive/Sphere.pdf");

File file2=new File(Environment.getExternalStorageDirectory()+"/airdrive/Robinson.pdf");

File file3=new File(Environment.getExternalStorageDirectory()+"/airdrive/Conspiracy.pdf");

File file4=new File(Environment.getExternalStorageDirectory()+"/airdrive/Expedition.pdf");

File file5=new File(Environment.getExternalStorageDirectory()+"/airdrive/Xperia.pdf");

fileArray=new ArrayList();

fileArray.add(file1);

fileArray.add(file2);

fileArray.add(file3);

fileArray.add(file4);

fileArray.add(file5);

Thread trd = new Thread(new Runnable(){

@Override

public void run(){

initializeServer();

for (int i=0;i<=4;i++){

copyFile(fileArray.get(i), fileArray.get(i).getName());

}

}

});

trd.start();

}

private void initializeServer() {

try {

serversocket=new ServerSocket(4444);

} catch (IOException e) {

e.printStackTrace();

Log.d("Listen failed", "Couldn't listen to port 4444");

}

try {

socket=serversocket.accept();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

Log.d("Acceptance failed","couldn't accept the server socket connection");

}

}

private void copyFile(File file, String name) {

FileInputStream fis;

long filesize=file.length();

try {

fis = new FileInputStream(file);

BufferedInputStream bis = new BufferedInputStream(fis);

@SuppressWarnings("resource")

DataInputStream dis = new DataInputStream(bis);

byte[] mybytearray = new byte[16384];

OutputStream os;

os=socket.getOutputStream();

DataOutputStream dos = new DataOutputStream(os);

dos.writeUTF(name); //filename is also sent to client

dos.writeLong(filesize); //file size is also sent to client

long z=filesize;

int n=0;

while((z > 0) && (n = dis.read(mybytearray, 0, (int)Math.min(mybytearray.length, z))) != -1){

dos.write(mybytearray,0,n);

dos.flush();

z -= n;

}

} catch (FileNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

if (serversocket != null) {

try {

serversocket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

可能是什么问题呢? 请帮忙!

编辑:控制台输出:

03-22 01:35:38.630: E/AndroidRuntime(12302): FATAL EXCEPTION: Thread-1212

03-22 01:35:38.630: E/AndroidRuntime(12302): java.lang.NullPointerException

03-22 01:35:38.630: E/AndroidRuntime(12302): at com.vinit.airdrive.MainActivity.copyFile(MainActivity.java:83)

03-22 01:35:38.630: E/AndroidRuntime(12302): at com.vinit.airdrive.MainActivity.access$1(MainActivity.java:73)

03-22 01:35:38.630: E/AndroidRuntime(12302): at com.vinit.airdrive.MainActivity$1.run(MainActivity.java:50)

03-22 01:35:38.630: E/AndroidRuntime(12302): at java.lang.Thread.run(Thread.java:856)

EDIT2:

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

if (serversocket != null && socket==null) {

try {

serversocket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

super.onDestroy();

}

java 抛出空指针_java - Java ServerSocket抛出空指针异常 - 堆栈内存溢出相关推荐

  1. java构建继承树_java - 使用继承构建通用树 - 堆栈内存溢出

    我正在构建一个通用的Tree类,它支持子树的继承. 但我遇到了一些问题. 请你帮帮我吗? 描述 让我们定义Tree类和BlueTree类,其中BlueTree extends Tree . 让我们定义 ...

  2. java poi 段落行间距_java - Apache poi XWPF Paragraph行间距 - 堆栈内存溢出

    我正在尝试使用Java / Coldfusion中的Apache Poi构建一个word文档. 到目前为止,它让我做了很多我想要的格式,除了段落的行间距. 有谁知道如何将段落设置为单行间隔? 它不断构 ...

  3. axis2 java客户端内存溢出怎么办_java - Axis2-总是出现404错误 - 堆栈内存溢出

    我试图将一些Web服务存根从Metro移到Axis2,但是在使用wsdl2java生成存根后,每次尝试进行服务调用时,我都会不断收到404错误. 16/12/2010 11:14:57 AM org. ...

  4. java从端口接收数据_java - Java中通过串行端口接收数据的效率更高 - 堆栈内存溢出...

    这是代码片段 我在这里启动一个动作监听器 try { port_seleted.addEventListener(this); } catch (TooManyListenersException e ...

  5. java获取excel文件第一行_java - 在Java中读取Excel文件,但第一行除外 - 堆栈内存溢出...

    我正在尝试从使用xlsx文件的JasperReport模板自动创建报告,我用来从excel文件读取的方法是这样的: String[] columnNames = new String[]{" ...

  6. java 获取permgen_java - Java:如何检查当前的Perm / PermGen大小? - 堆栈内存溢出

    您可以在这里使用jmap ,它是JVM堆转储工具. 例如: jmap -heap 5900 它将打印: Heap Configuration: MinHeapFreeRatio = 40 MaxHea ...

  7. java远程计算机终止,java - javax.net.ssl.SSLHandshakeException:远程主机终止了握手 - 堆栈内存溢出...

    我已经使用以下命令在Java信任库(cacerts)中安装了证书: keytool-导入-文件" C:\\ Users \\ kdursoji \\ Downloads \\ Zscaler ...

  8. android 415错误,java - Android Retrofit2无法添加标头(415错误代码) - 堆栈内存溢出...

    我正在尝试通过skyscanner api访问票证数据并将其传递到我的视图,但是我无法实现这一点,因为我收到415错误代码,我正在使用Retrofit2并以编程方式添加标头. 我的界面如下所示: pu ...

  9. java 最后的异常_java – 最后不要抛出堆栈溢出异常

    Error不是例外.所以捕捉任何异常都不会捕获StackOverflowError. 所以让我们先来看一下"明显的错误" – (这段代码不太适合这个答案后面的说明): catch( ...

最新文章

  1. Linux 搭建SVN 服务器
  2. k近邻回归算法python_经典算法之K近邻(回归部分)
  3. 深入分析Java Web技术内幕 修订版 pdf
  4. 读数据库所有表和表结构的sql语句了(mssql)
  5. OpenCV案例(三): 玉米颗粒计数
  6. 该来的终于来了:“第一起”基于 IPv6 的 DDoS 攻击
  7. 我的压缩软件选择:7zip软件+Zip格式
  8. 不确定度在线计算_国睿认证干货来啦:实验室CNAS认可常见问题集锦(五):关于不确定度...
  9. 17、Java——汽车租赁系统(对象+数组)
  10. 什么是POE交换机?POE交换机的作用
  11. 文化财经SAR指标计算(二)
  12. java Base64编解码
  13. 安装loadrunner11的时候提示'命令行选项语法错误。键入命令 / ?’ 怎么办
  14. 好用的 Windows 软件授权管理工具 - slmgr
  15. 优思学院|准时化生产(JIT)是什么?
  16. [Maven进阶]多环境配置与应用
  17. Hadoop YARN配置参数剖析(4)—Fair Scheduler相关参数
  18. Suzy找到实习了吗Day25 | 回溯算法进行时:216. 组合总和 III,17电话号码
  19. Mysql高可用集群搭建(一)一主两从服务搭建
  20. 丰泽就业老师告知90后求职面试应具备的5种心态_河南丰泽教育JAVA/3G学院

热门文章

  1. 【英语学习】【WOTD】remittance 释义/词源/示例
  2. 【英语学习】【Daily English】U11 Work L04 Can you keep it a secret?
  3. 【C/C++】深入理解原子操作 volatile i为什么不能保证i++的原子性
  4. Pentium 4处理器架构/微架构/流水线 (6) - NetBurst前端详解 - 取指/译码/缓存
  5. Pentium Pro架构/流水线及其优化 (3) - 指令流水线/乱序执行核/高速缓存/分支预测/指令预取
  6. android 加载外部矢量图SVG
  7. feather 设置坐标刻度_matplotlib学习记录:调整刻度范围和刻度标签
  8. MFC通过窗口名字(caption的内容)查找窗口,并将其隐藏或者置顶显示
  9. 科罗拉多大学 C#游戏编程课程总结
  10. [高级光照]球谐光照