Pessoal, boa tarde.
Pode parecer uma pergunta boba, mas eu consigo fazer uma Streaming de um Objeto de uma Applet
para um Servlet:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.URL;
import java.net.URLConnection;
import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
import javax.swing.JButton;
import javax.swing.JComponent;
public class WebcamCaptureApplet extends Applet implements ActionListener {
public static Player player = null;
public CaptureDeviceInfo di = null;
public MediaLocator ml = null;
public JButton iniciar = null;
public JButton capture = null;
public JButton fechar = null;
public Buffer buf = null;
public Image img = null;
public VideoFormat vf = null;
public BufferToImage btoi = null;
public ImagePanel imgpanel = null;
public URL url;
public URLConnection conn;
public String hostname = "localhost" ;
public int port = 8080;
public Panel panel = null;
public void init(){
setLayout(new BorderLayout());
setSize(320,320);
imgpanel = new ImagePanel();
capture = new JButton("Foto");
capture.setSize(60,40);
capture.addActionListener(this);
//This may differ check the jmf registry for
// correct entry
String str2 = "vfw://:0";
ml = new MediaLocator(str2);
//hostname = getCodeBase().getHost();
//port = getCodeBase().getPort();
try {
player = Manager.createRealizedPlayer(ml);
player.start();
Component comp;
if ((comp = player.getVisualComponent()) != null) {
add(comp,BorderLayout.NORTH);
}
panel = new Panel();
panel.add(capture);
add(panel,BorderLayout.CENTER);
//add(imgpanel,BorderLayout.SOUTH);
} catch (Exception e) {
e.printStackTrace();
}
}
public void paint (Graphics g) {
}
public static void playerclose() {
player.close();
player.deallocate();
}
public void actionPerformed(ActionEvent e) {
JComponent c = (JComponent) e.getSource();
if (c == capture) {
// Grab a frame
FrameGrabbingControl fgc = (FrameGrabbingControl)
player.getControl("javax.media.control.FrameGrabbingControl");
buf = fgc.grabFrame();
btoi = new BufferToImage((VideoFormat)buf.getFormat());
img = btoi.createImage(buf);
String matric = "9999";
Objeto obj = new Objeto();
obj.setImagem(img);
obj.setMatric(matric);
UploadImage(obj);
player.close();
player.deallocate();
}
}
public void start()
{
}
public void UploadImage(Objeto obj){
try {
String path = "http://"+hostname+":"+port+"/webcam/sampleServlet.do";
url = new URL(path);
conn = url.openConnection();
//Prepare for both input and output
conn.setDoInput(true);
conn.setDoOutput(true);
//Turn off caching
conn.setUseCaches(false);
//Set the content type to be java-internal/classname
conn.setRequestProperty("Content-type", "application/x-java-serialized-object");
//Write the object as post data
ObjectOutputStream out = new ObjectOutputStream(conn.getOutputStream());
out.writeObject(obj); //Dá erro aqui
out.flush();
out.close();
InputStream ins = conn.getInputStream();
ObjectInputStream objin = new ObjectInputStream(ins);
String msg = (String)objin.readObject();
System.out.println(msg.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(e);
}
}
class ImagePanel extends Panel {
public Image myimg = null;
public ImagePanel() {
setLayout(null);
setSize(120,140);
}
public void setImage(Image img) {
this.myimg = img;
repaint();
}
public void paint(Graphics g) {
if (myimg != null) {
g.drawImage(myimg, 0, 0, this);
}
}
}
public class Objeto implements Serializable{
private String matric = null;
private Image imagem = null;
public Objeto() {
super();
// TODO Auto-generated constructor stub
}
public Objeto(String matric, Image imagem) {
super();
this.matric = matric;
this.imagem = imagem;
}
public String getMatric() {
return matric;
}
public void setMatric(String matric) {
this.matric = matric;
}
public Image getImagem() {
return imagem;
}
public void setImagem(Image imagem) {
this.imagem = imagem;
}
}
}
A foto é tirada sem problemas e o o objeto é montado "bunito".
Só na hora de enviar que dá java.io.NotSerializableException: java.awt.image.BufferedImage em out.writeObject(obj);
eu coloquei um System.out.println na primeira linha do doPost() do servlet mas nem da erro, ou seja, não chega a enviar.
A conexão ele abre porque quando o tomcat está down ele dá um erro de conexão.
Alguém pode me dar uma luz?

de alegria)