안드로이드 개발 질문/답변
(글 수 45,052)
핸드폰에서 컴퓨터로 사진을 전송하는 어플을 만들고
서버를 구축해서 실행을 돌려봤는데요
아래는 작성한 코드구요. 밑에 빨간색 친 부분이 자꾸 java.lang.NullPointerException 에러가 뜨네요
뭐가 문제인가요?? ㅠㅠㅠ
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Timer;
import javax.imageio.ImageIO;
public class server_input_thread implements Serializable{
public static void main(String[] ar)
{
System.out.println("Thread를 이용한 사진 저장 서버입니다.");
final int SERVERPORT = 5555;
int count = 0;
//udp를 통해 전송되는 사진을 임의의 파일로 만들어 저장
try{
DatagramSocket datagramSocket = new DatagramSocket( SERVERPORT );
byte[] data = new byte[512];
DatagramPacket datagramPacket = new DatagramPacket( data , data.length );
datagramSocket.receive(datagramPacket);
String info = new String(datagramPacket.getData() , 0 , datagramPacket.getLength());
String da[] = info.split(",");
String name = da[0];
int length = Integer.valueOf(da[1]);
String type = da[2];
FileOutputStream output = new FileOutputStream(name);
if(type.contains("other"))
{
System.out.println("파일 수신중");
byte buf1[] = new byte[length];
int a=50000, t=0;
for(int i=0; i<length; i+=50000) {
try {
System.out.println("수신 과정" + i + "..." + length);
byte buf2[] = new byte[50000];
DatagramPacket dp1 = new DatagramPacket(buf2, buf2.length);
datagramSocket.receive(dp1);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(length<i+50000)
a=length-i;
System.arraycopy(buf2, 0, buf1, i, a);
}catch(Exception e)
{
e.printStackTrace();
break;
}
}
System.out.println("파일 전송 완료");
output.write(buf1, 0, buf1.length);
output.flush();
output.close();
}
else
{
byte[] file_data = new byte[Integer.valueOf(da[1])];
datagramSocket.receive(datagramPacket);
file_data = datagramPacket.getData();
output.write(file_data);
output.flush();
output.close();
datagramSocket.close();
try {
BufferedImage bi = ImageIO.read( new File(name) );
pic p = new pic(name);
p.setSize(bi.getWidth(),bi.getHeight());
p.setVisible(true);
System.out.println("사진 전송이 완료 되었습니다.");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
catch(IOException ioe)
{
}
}
}
//저장된 파일을 Frame 창에 띄우는 class
class pic extends Frame
{
URL url;
Image img1;
Panel p1;
public pic(String s)
{
p1 = new Panel();
this.add(p1,BorderLayout.SOUTH);
p1.setLayout(new BorderLayout());
img1 = Toolkit.getDefaultToolkit().getImage(s);
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
this.setResizable(false);
}
public void paint(Graphics g)
{
g.drawImage(img1, 0, 0,this);
}
}
말 그대로 널 포인트 참조요.. 에러 로그 보면 어디 몇 번재 줄인지 나와있어요.