代码:
public class WebApplet extends JApplet{
private static final long serialVersionUID = 3256444702936019250L;
private static final Dimension DEFAULT_SIZE = new Dimension(530, 320);
private JScrollPane jpane;
public void init() {
try{
//获取图形对象
URL url = new URL("http://192.168.1.220/applet/GetData");
URLConnection urlConn = url.openConnection();
urlConn.setDoOutput(true);
urlConn.setDoInput(true);
urlConn.setUseCaches(false); ObjectInputStream inp=new ObjectInputStream(new BufferedInputStream(urlConn.getInputStream()));
if(inp==null){
System.out.println("ObjectInputStream 为空!!!!"); }else{
System.out.println("ObjectInputStream 不为空!!!!"); } Object obj=inp.readObject();
System.out.println("inp.readObject(): "+obj);
jpane=(JScrollPane)obj; //取出图形内容
System.out.println(jpane);
//初始化按钮对象
JToolBar toolbar = new JToolBar();
toolbar.setFloatable(false);
JButton save = new JButton("保存");
save.setBounds(20,0,50,25); JButton open = new JButton("打开");
open.setBounds(90,0,50,25);
String file="d://graph/"+new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//将按钮对象放到applet中
JPanel bjpanel=new JPanel();
bjpanel.setLayout(new FlowLayout(FlowLayout.LEFT));
toolbar.add(save);
toolbar.add(open);
bjpanel.add(toolbar);
add(bjpanel,BorderLayout.NORTH);
JPanel fjpanel=new JPanel();
fjpanel.add(jpane);
fjpanel.setLayout(new BoxLayout(fjpanel,BoxLayout.Y_AXIS));
add(fjpanel,BorderLayout.CENTER);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
public void start(){
}
public static void main(String arg[]){
WebApplet app=new WebApplet();
app.init();
}}
在Eclipse中运行没问题,但是放到网页上运行就报错了,或者是在命令提示符下运行java WebApplet 命令也报错
异常如下:ObjectInputStream 不为空!!!!
java.lang.NullPointerException
at java.awt.Container.readObject(Container.java:3507)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946
)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1809) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
719)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.access$300(ObjectInputStream.java:185)
at java.io.ObjectInputStream$GetFieldImpl.readFields(ObjectInputStream.j
ava:2069)
at java.io.ObjectInputStream.readFields(ObjectInputStream.java:518)
at java.awt.Container.readObject(Container.java:3492)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946
)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1809) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
719)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
at WebApplet.init(WebApplet.java:45)
at WebApplet.main(WebApplet.java:94)请大家帮忙看看是怎么回事呀...
public class WebApplet extends JApplet{
private static final long serialVersionUID = 3256444702936019250L;
private static final Dimension DEFAULT_SIZE = new Dimension(530, 320);
private JScrollPane jpane;
public void init() {
try{
//获取图形对象
URL url = new URL("http://192.168.1.220/applet/GetData");
URLConnection urlConn = url.openConnection();
urlConn.setDoOutput(true);
urlConn.setDoInput(true);
urlConn.setUseCaches(false); ObjectInputStream inp=new ObjectInputStream(new BufferedInputStream(urlConn.getInputStream()));
if(inp==null){
System.out.println("ObjectInputStream 为空!!!!"); }else{
System.out.println("ObjectInputStream 不为空!!!!"); } Object obj=inp.readObject();
System.out.println("inp.readObject(): "+obj);
jpane=(JScrollPane)obj; //取出图形内容
System.out.println(jpane);
//初始化按钮对象
JToolBar toolbar = new JToolBar();
toolbar.setFloatable(false);
JButton save = new JButton("保存");
save.setBounds(20,0,50,25); JButton open = new JButton("打开");
open.setBounds(90,0,50,25);
String file="d://graph/"+new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//将按钮对象放到applet中
JPanel bjpanel=new JPanel();
bjpanel.setLayout(new FlowLayout(FlowLayout.LEFT));
toolbar.add(save);
toolbar.add(open);
bjpanel.add(toolbar);
add(bjpanel,BorderLayout.NORTH);
JPanel fjpanel=new JPanel();
fjpanel.add(jpane);
fjpanel.setLayout(new BoxLayout(fjpanel,BoxLayout.Y_AXIS));
add(fjpanel,BorderLayout.CENTER);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
public void start(){
}
public static void main(String arg[]){
WebApplet app=new WebApplet();
app.init();
}}
在Eclipse中运行没问题,但是放到网页上运行就报错了,或者是在命令提示符下运行java WebApplet 命令也报错
异常如下:ObjectInputStream 不为空!!!!
java.lang.NullPointerException
at java.awt.Container.readObject(Container.java:3507)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946
)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1809) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
719)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.access$300(ObjectInputStream.java:185)
at java.io.ObjectInputStream$GetFieldImpl.readFields(ObjectInputStream.j
ava:2069)
at java.io.ObjectInputStream.readFields(ObjectInputStream.java:518)
at java.awt.Container.readObject(Container.java:3492)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946
)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1809) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
719)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
at WebApplet.init(WebApplet.java:45)
at WebApplet.main(WebApplet.java:94)请大家帮忙看看是怎么回事呀...
urlConn.setDoInput(true);
urlConn.setUseCaches(false); 第一句你是要POST的,但我没看到你POST数据啊?你应该先向OutputStream发送数据才可以!所以,我认为你的inp根本没有读取到任何数据,才引起的异常!
urlConn.setDoInput(true);
urlConn.setUseCaches(false);
这3行删除了
问题依旧啊
java.lang.NullPointerException
at java.awt.Container.readObject(Container.java:3507) 也许你穿过来的readObject并不是对象,或者有错误。 再具体的,我就猜不到了。 SORRY
这是servlet的代码:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { javax.servlet.ServletOutputStream servletoutputstream = response
.getOutputStream();
ObjectOutputStream objectoutputstream = new ObjectOutputStream(
servletoutputstream);
GraphLayout layout = new GraphLayout();
JScrollPane jpane=layout.getJpane(); //显示图形面板
objectoutputstream.writeObject(jpane);
objectoutputstream.flush();
objectoutputstream.close();
}这样得不到数据吗?????
可是我在Eclipse中运行的时候是没有问题的呀!!!!
NullPointer解决方法很简单, 在他提示的错误代码行加一个断点, debug过去看看哪个对象为null就可以了
在网页上看这个applet的时候就出问题了,也没有办法debug,只能吧可能为空的对象打印出来,
但是结果是并没有看到为空的对象呀!!!!!
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at coco.org.layout.WebApplet.init(WebApplet.java:38)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
我发现真正的问题好像是这个。
因为我的applet里面调用了服务器上的一个servlet,出了问题,这个怎么解决呀???