找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 4478|回复: 2

空指针问题。。。太无语了!

[复制链接]
发表于 2013-6-30 22:32:02 | 显示全部楼层 |阅读模式
本帖最后由 MKAIR 于 2013-7-2 18:27 编辑
  1. import java.awt.BorderLayout;
  2. import java.awt.GridLayout;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.io.DataInputStream;
  6. import java.io.DataOutputStream;
  7. import java.io.IOException;

  8. import javax.swing.JButton;
  9. import javax.swing.JLabel;
  10. import javax.swing.JPanel;
  11. import javax.swing.JSeparator;
  12. import javax.swing.JTabbedPane;
  13. import javax.swing.JTextArea;
  14. import javax.swing.SwingUtilities;
  15. import javax.swing.WindowConstants;

  16. import lejos.pc.comm.NXTConnector;

  17. import org.kociemba.twophase.Search;



  18. /**
  19. * This code was edited or generated using CloudGarden's Jigloo
  20. * SWT/Swing GUI Builder, which is free for non-commercial
  21. * use. If Jigloo is being used commercially (ie, by a corporation,
  22. * company or business for any purpose whatever) then you
  23. * should purchase a license for each developer using Jigloo.
  24. * Please visit www.cloudgarden.com for details.
  25. * Use of Jigloo implies acceptance of these licensing terms.
  26. * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
  27. * THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
  28. * LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
  29. */
  30. public class NewJFrame extends javax.swing.JFrame implements ActionListener{

  31.     {
  32.         //Set Look & Feel
  33.         try {
  34.             javax.swing.UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
  35.         } catch(Exception e) {
  36.             e.printStackTrace();
  37.         }
  38.     }

  39.     /**
  40.      * Simple JavaDoc
  41.      * @author Michael Peng
  42.      * Set the Version of the main program
  43.      */
  44.     private static final long serialVersionUID = 6338002822670303714L;
  45.     // console string
  46.     private static final String con = null;
  47.     private JSeparator jSeparator1;
  48.     private JLabel Note;
  49.     private JTextArea Cube;
  50.     private JPanel CubePanel;
  51.     private JButton solve;
  52.     private JPanel jPanel1;
  53.     private JLabel debug;
  54.     private JButton test;
  55.     private JButton disconnect;
  56.     private JPanel ConnectionDebug;
  57.     private JPanel mainPanel;
  58.     private JButton connect;
  59.     private JTabbedPane ActionPane;
  60.     private JTextArea Console;
  61.     private static NXTConnector conn = new NXTConnector();
  62.     private DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
  63.     private DataInputStream dis = new DataInputStream(conn.getInputStream());
  64.     /**
  65.     * Auto-generated main method to display this JFrame
  66.     */
  67.     public static void main(String[] args) {
  68.         SwingUtilities.invokeLater(new Runnable() {
  69.             public void run() {
  70.                 NewJFrame inst = new NewJFrame();
  71.                 inst.setLocationRelativeTo(null);
  72.                 inst.setVisible(true);
  73.             }
  74.         });
  75.     }
  76.    
  77.     public NewJFrame() {
  78.         super();
  79.         initGUI();
  80.     }
  81.    
  82.     private void initGUI() {
  83.         try {
  84.             setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  85.             this.setTitle("MindCuber Console Pro v1.00");
  86.             {
  87.                 mainPanel = new JPanel();
  88.                 getContentPane().add(mainPanel, BorderLayout.CENTER);
  89.                 mainPanel.setPreferredSize(new java.awt.Dimension(487, 311));
  90.                 {
  91.                     connect = new JButton();
  92.                     mainPanel.add(connect);
  93.                     connect.setText("Connect!");
  94.                     connect.setPreferredSize(new java.awt.Dimension(224, 37));
  95.                     connect.addActionListener(this);
  96.                 }
  97.                 {
  98.                     ActionPane = new JTabbedPane();
  99.                     mainPanel.add(ActionPane);
  100.                     ActionPane.setPreferredSize(new java.awt.Dimension(329, 255));
  101.                     {
  102.                         Console = new JTextArea(con);
  103.                         ActionPane.addTab("Console", null, Console, null);
  104.                         Console.setPreferredSize(new java.awt.Dimension(429, 226));
  105.                         ActionPane.addTab("Connection Debug", null, getConnectionDebug(), null);
  106.                         ActionPane.addTab("Cube", null, getJPanel1(), null);
  107.                     }
  108.                 }
  109.             }
  110.             pack();
  111.             this.setSize(432, 349);
  112.         } catch (Exception e) {
  113.             //add your error handling code here
  114.             e.printStackTrace();
  115.         }
  116.     }
  117.     private JPanel getConnectionDebug() {
  118.         if(ConnectionDebug == null) {
  119.             ConnectionDebug = new JPanel();
  120.             ConnectionDebug.add(getDisconnect());
  121.             ConnectionDebug.add(getTest());
  122.             ConnectionDebug.add(getDebug());
  123.             ConnectionDebug.add(getSolve());
  124.             ConnectionDebug.add(getJSeparator1());
  125.         }
  126.         return ConnectionDebug;
  127.     }
  128.    
  129.     private JButton getDisconnect() {
  130.         if(disconnect == null) {
  131.             disconnect = new JButton();
  132.             disconnect.setText("Disconnect!");
  133.             disconnect.setPreferredSize(new java.awt.Dimension(132, 71));
  134.             disconnect.addActionListener(this);
  135.         }
  136.         return disconnect;
  137.     }
  138.    
  139.     private JButton getTest() {
  140.         if(test == null) {
  141.             test = new JButton();
  142.             test.setPreferredSize(new java.awt.Dimension(129, 71));
  143.             test.setText("Test Connection!");
  144.             test.addActionListener(this);
  145.         }
  146.         return test;
  147.     }
  148.    
  149.     private JLabel getDebug() {
  150.         if(debug == null) {
  151.             debug = new JLabel();
  152.             debug.setText("waiting...");
  153.             debug.setPreferredSize(new java.awt.Dimension(234, 15));
  154.         }
  155.         return debug;
  156.     }

  157.     public void actionPerformed(ActionEvent e){
  158.         Console.setLineWrap(true);
  159.         if (e.getSource() == connect)
  160.         {
  161.             try {
  162.                    conn.connectTo();
  163.             } catch (Exception e1) {
  164.                 e1.printStackTrace();
  165.             }
  166.             Console.setText("connected");
  167.         }
  168.         else if (e.getSource() == disconnect)
  169.         {
  170.             try {
  171.                 conn.close();
  172.             } catch (IOException e1) {
  173.                 e1.printStackTrace();
  174.             }
  175.             Console.setText("Disconnected");
  176.         }
  177.         else if (e.getSource() == solve)
  178.         {
  179.             String result = Search.solution(Cube.getText(), 20,20,false);
  180.             System.out.println(result);
  181.         }
  182.         else if (e.getSource() == test)
  183.         {
  184.             try {
  185.                 dos.writeInt(100);
  186.             } catch (IOException e1) {
  187.                 Console.setText("Error while sending Int");
  188.                 System.err.println("Problems occured while testing connection. Please try again.");
  189.                 System.exit(0);
  190.             }
  191.             try {
  192.                 dis.readInt();
  193.             } catch (IOException e1) {
  194.                 Console.setText("Error while receiving Int");
  195.                 System.err.println("Problems occured while testing connection. Please try again.");
  196.                 System.exit(0);
  197.             }
  198.         }
  199.     }
  200.    
  201.     private JPanel getJPanel1() {
  202.         if(jPanel1 == null) {
  203.             jPanel1 = new JPanel();
  204.             GridLayout jPanel1Layout = new GridLayout(1, 1);
  205.             jPanel1Layout.setHgap(5);
  206.             jPanel1Layout.setVgap(5);
  207.             jPanel1Layout.setColumns(1);
  208.             jPanel1.setLayout(jPanel1Layout);
  209.             jPanel1.add(getCubePanel());
  210.         }
  211.         return jPanel1;
  212.     }

  213.     private JButton getSolve() {
  214.         if(solve == null) {
  215.             solve = new JButton();
  216.             solve.setText("Solve that Cube!");
  217.             solve.setPreferredSize(new java.awt.Dimension(183, 56));
  218.             solve.addActionListener(this);
  219.         }
  220.         return solve;
  221.         
  222.     }
  223.    

  224.     private JPanel getCubePanel() {
  225.         if(CubePanel == null) {
  226.             CubePanel = new JPanel();
  227.             CubePanel.add(getCube());
  228.             CubePanel.add(getNote());
  229.         }
  230.         return CubePanel;
  231.     }
  232.    
  233.     private JTextArea getCube() {
  234.         if(Cube == null) {
  235.             Cube = new JTextArea();
  236.             Cube.setPreferredSize(new java.awt.Dimension(305, 180));
  237.         }
  238.         return Cube;
  239.     }
  240.    
  241.     private JLabel getNote() {
  242.         if(Note == null) {
  243.             Note = new JLabel();
  244.             Note.setText("Remember, the cube must be white face and blue up!");
  245.         }
  246.         return Note;
  247.     }


  248.    
  249.     private JSeparator getJSeparator1() {
  250.         if(jSeparator1 == null) {
  251.             jSeparator1 = new JSeparator();
  252.             jSeparator1.setPreferredSize(new java.awt.Dimension(212, 2));
  253.         }
  254.         return jSeparator1;
  255.     }


  256. }

复制代码
按下test按钮,显示:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.io.DataOutputStream.writeInt(DataOutputStream.java:197)
    at NewJFrame.actionPerformed(NewJFrame.java:194)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:688)
    at java.awt.EventQueue$3.run(EventQueue.java:686)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:702)
    at java.awt.EventQueue$4.run(EventQueue.java:700)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

(稍作更改)


BT Server.rar

386.81 KB, 下载次数: 1

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2013-7-2 08:59:58 | 显示全部楼层
代码不仅可以运行,还很美观。

不过不知道你的org.kociemba.twophase.Search;和Search.solution(Cube.getText(), 20,20,false);是什么,所以没运行这一段。

你用了swing框架,这个东西要单独安装。

PS:纯粹的善意提醒:如果是你自己写出这么复杂的代码,不该会问出这么“业余”的问题。如果是拿别人的代码学习,我建议从简单的,基础的学起,问题更少,进步更快。

PS:可否将全部的代码做个附件下载?

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-8-5 13:05:58 | 显示全部楼层
Swing程序如果运行正常,出现
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
这个错误,如果你不想精益求精通常可以不必理会。

常常是因为线程同步问题引发的。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2025-1-30 13:09 , Processed in 0.099797 second(s), 21 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表