黑马程序员技术交流社区

标题: 报了两个空指针异常,看了半天找不出问题,求帮忙!!! [打印本页]

作者: luoanjade    时间: 2014-3-20 00:59
标题: 报了两个空指针异常,看了半天找不出问题,求帮忙!!!
源代码:
  1. package com.frame;

  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;

  5. public class TextAreaFrame1 extends JFrame{

  6.         private static final long serialVersionUID = 1L;
  7.        
  8.         Toolkit tk = Toolkit.getDefaultToolkit();
  9.         Dimension d = tk.getScreenSize();
  10.        
  11.         public TextAreaFrame1(){
  12.                 setTitle("发送--接收");
  13.                 setSize(500,400);
  14.                 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  15.                 centerWindow(this);
  16.                 JPanel panel = new TextAreaPanel();
  17.                 this.add(panel);
  18.         }
  19.        
  20.         private void centerWindow(JFrame frame){
  21.                 int centerWidth = ((int)d.getWidth() - frame.getWidth())/2;
  22.                 int centerHeight = ((int)d.getHeight() - frame.getHeight())/2;
  23.                 setLocation(centerWidth, centerHeight);
  24.         }
  25.         public static void main(String[] args) {
  26.                 JFrame frame = new TextAreaFrame1();
  27.                 frame.setVisible(true);
  28.         }
  29. }

  30. class TextAreaPanel extends JPanel implements ActionListener {

  31.         private static final long serialVersionUID = 1L;

  32.         final int vScroll = JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED;//纵向滚动条设置为,需要时出现
  33.         final int hScroll = JScrollPane.HORIZONTAL_SCROLLBAR_NEVER;//横向滚动条设置为,永远不出现
  34.         private JTextArea summaryArea,sendArea;//定义两个文本区域,一个是显示所有信息,一个是用于输入发送信息
  35.         private JButton submitBt,exitBt;//定义两个按钮,一个是发送,一个是退出
  36.         private JScrollPane summaryScroll,sendScroll;//定义滚动条,分别是两个文本域的滚动条
  37. //        private String summaryText,sendText;
  38.        
  39.         public TextAreaPanel(){
  40.                 //定义显示所有消息的文本域
  41.                 summaryArea = new JTextArea(6,40);
  42.                 summaryArea.setWrapStyleWord(true);
  43.                 summaryArea.setLineWrap(true);
  44.                 summaryArea.setEditable(false);
  45.                 //定义发送消息的文本域
  46.                 sendArea = new JTextArea(3,40);
  47.                 sendArea.setWrapStyleWord(true);
  48.                 sendArea.setLineWrap(true);
  49.                 //定义滚动条
  50.                 summaryScroll = new JScrollPane(summaryArea,vScroll,hScroll);
  51.                 sendScroll = new JScrollPane(sendArea,vScroll,hScroll);
  52.                 //定义两个按钮
  53.                 submitBt = new JButton("发送");
  54.                 exitBt = new JButton("退出");
  55.                 //将所有元素添加到panel中
  56.                 add(summaryArea);
  57.                 add(summaryScroll);
  58.                 add(sendArea);
  59.                 add(sendScroll);
  60.                 add(submitBt);
  61.                 add(exitBt);
  62.                 //监听两个按钮
  63.                 submitBt.addActionListener(this);
  64.                 exitBt.addActionListener(this);
  65.         }
  66.        
  67.         /**
  68.          * 监听,处理事件
  69.          */
  70.         public void actionPerformed(ActionEvent e) {
  71.                 Object source = e.getSource();

  72.                 if(source == submitBt){
  73.                         String summaryText = summaryArea.getText();
  74.                         String sendText = sendArea.getText();
  75.                         if(!sendText.equals("") && sendText != null){
  76.                                 summaryText = summaryText + sendText + "\n";
  77.                                 summaryArea.setText(summaryText);
  78.                         }
  79.                         else{
  80.                                 JOptionPane.showMessageDialog(null, "不能发送空消息!");
  81.                         }
  82.                         sendArea.setText("");
  83.                 }
  84.                 if(source == exitBt){
  85.                         System.exit(0);
  86.                 }
  87.         }
  88.        
  89. }
复制代码


异常信息:
  1. Exception in thread "main" java.lang.NullPointerException
  2.         at javax.swing.ScrollPaneLayout.preferredLayoutSize(ScrollPaneLayout.java:495)
  3.         at java.awt.Container.preferredSize(Container.java:1670)
  4.         at java.awt.Container.getPreferredSize(Container.java:1655)
  5.         at javax.swing.JComponent.getPreferredSize(JComponent.java:1646)
  6.         at java.awt.FlowLayout.layoutContainer(FlowLayout.java:610)
  7.         at java.awt.Container.layout(Container.java:1486)
  8.         at java.awt.Container.doLayout(Container.java:1475)
  9.         at java.awt.Container.validateTree(Container.java:1573)
  10.         at java.awt.Container.validateTree(Container.java:1580)
  11.         at java.awt.Container.validateTree(Container.java:1580)
  12.         at java.awt.Container.validateTree(Container.java:1580)
  13.         at java.awt.Container.validateTree(Container.java:1580)
  14.         at java.awt.Container.validate(Container.java:1545)
  15.         at java.awt.Window.show(Window.java:890)
  16.         at java.awt.Component.show(Component.java:1456)
  17.         at java.awt.Component.setVisible(Component.java:1408)
  18.         at java.awt.Window.setVisible(Window.java:871)
  19.         at com.frame.TextAreaFrame1.main(TextAreaFrame1.java:30)
  20. Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
  21.         at javax.swing.ScrollPaneLayout.preferredLayoutSize(ScrollPaneLayout.java:495)
  22.         at java.awt.Container.preferredSize(Container.java:1670)
  23.         at java.awt.Container.getPreferredSize(Container.java:1655)
  24.         at javax.swing.JComponent.getPreferredSize(JComponent.java:1646)
  25.         at java.awt.FlowLayout.layoutContainer(FlowLayout.java:610)
  26.         at java.awt.Container.layout(Container.java:1486)
  27.         at java.awt.Container.doLayout(Container.java:1475)
  28.         at java.awt.Container.validateTree(Container.java:1573)
  29.         at java.awt.Container.validateTree(Container.java:1580)
  30.         at java.awt.Container.validateTree(Container.java:1580)
  31.         at java.awt.Container.validateTree(Container.java:1580)
  32.         at java.awt.Container.validateTree(Container.java:1580)
  33.         at java.awt.Container.validate(Container.java:1545)
  34.         at java.awt.Window.dispatchEventImpl(Window.java:2553)
  35.         at java.awt.Component.dispatchEvent(Component.java:4287)
  36.         at java.awt.EventQueue.dispatchEvent(EventQueue.java:605)
  37.         at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:276)
  38.         at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:201)
  39.         at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:191)
  40.         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:186)
  41.         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:178)
  42.         at java.awt.EventDispatchThread.run(EventDispatchThread.java:139)
复制代码

作者: 戒爱    时间: 2014-3-20 01:06
老毕的话讲,就是奔溃了
作者: Dijkstra    时间: 2014-3-20 01:23
我试了,没有报错,可能是你的eclipse里的其他错误程序没有关掉导致的,建议你把其他程序都关掉再尝试运行,求技术分呀
作者: 坏米饭    时间: 2014-3-20 01:34
同样没报错
作者: luoanjade    时间: 2014-3-20 19:13
Dijkstra 发表于 2014-3-20 01:23
我试了,没有报错,可能是你的eclipse里的其他错误程序没有关掉导致的,建议你把其他程序都关掉再尝试运行 ...

不知道是不是jdk版本的事,你们用的是那一版?
作者: linweiwen    时间: 2014-3-20 19:56
没问题啊楼主,或者你debug一下试试?

Frame1.jpg (44.2 KB, 下载次数: 50)

Frame1.jpg

作者: Dijkstra    时间: 2014-3-20 20:57
luoanjade 发表于 2014-3-20 19:13
不知道是不是jdk版本的事,你们用的是那一版?

这个跟jdk没关系,肯定是其他方面的错误
作者: luoanjade    时间: 2014-3-20 23:53
Dijkstra 发表于 2014-3-20 20:57
这个跟jdk没关系,肯定是其他方面的错误

还真不知道什么原因,有可能是jdk的问题,有可能是系统问题。
我同事的机器上运行也没问题。他是win7,jdk6。我是win8,jdk7
作者: Dijkstra    时间: 2014-3-21 05:24
luoanjade 发表于 2014-3-20 23:53
还真不知道什么原因,有可能是jdk的问题,有可能是系统问题。
我同事的机器上运行也没问题。他是win7,jd ...

第一:你jdk没安装好,或者eclipse里的环境没建好
第二:你把这个java文件单独拉出来试试,可能是别的java文件的错误,
第三:跟机器和jdk版本真的没有一点点关系
作者: luoanjade    时间: 2014-3-22 14:21
Dijkstra 发表于 2014-3-21 05:24
第一:你jdk没安装好,或者eclipse里的环境没建好
第二:你把这个java文件单独拉出来试试,可能是别的jav ...

就是jdk的问题,我64位系统装的32位的jdk,我换了64位的jdk就没问题了。但是为什么之前做的好多程序都没问题呢。奇怪!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2