2011-01-19 17 views
1

ネストされたクラスはネストされたクラスの変数を使用できるため、これらのネストされたクラスを使用する必要がありました。これらのクラスをsomething.javaに移動してコードを簡素化するにはどうすればいいのですか?クラスはまだJlabelのようなGUIクラスのコントロールを持っていますか?Swingクラスのネストされたクラスが多すぎます

これはあなたが自分のファイルに内部クラスの一部を移動する...新しいファイルにEclipseのRefactor->移動タイプを使用することができます重要な部分に

public class GUI { 

     public GUI(){ 

      VitaminDEngineStarter vdes = new VitaminDEngineStarter(); 
      Registry registry = null; 
      try { 
       registry = LocateRegistry.getRegistry(); 
      } catch (RemoteException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 

      try { 
       vd = (VitaminD)registry.lookup(VitaminD.SERVICE_NAME); 
      } catch(Exception e) { 
       e.printStackTrace(); 
      } 



      SMS a = new SMS(5); 
      try { 
       arduino.connect("COM3"); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      System.out.println("connecting:"+ a.connect()); 
      System.out.println("connected? :" + a.checkConnect()); 
      System.out.println("signal: "+a.checkSignal()); 
      System.out.println("deliver report :" + a.DeliveryReportOn()); 
      SMS.Read read = a.new Read(arduino); 


     } 

     class ShowSense implements Runnable { 


      @Override 
      public void run() { 
       String[] temp; 
       String light = ""; 
       String temperature = ""; 
       String hum = ""; 
       String sens = ""; 
       boolean humanact = false; 

       // TODO Auto-generated method stub 
       while (true){ 
        try { 
         humanact = vd.gethumanActivity(); 
        } catch (RemoteException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        sens = arduino.getSensor(); 
        temp = sens.split(","); 
        light = temp[1]; 
        temperature = temp[0]; 
        hum = temp[2]; 

        LightIntensity.setText(light); 
        Temperature.setText(temperature); 
        humidity.setText(hum); 


        if (humanact){ 
         personActivity.setText("in place"); 
        } 
        else{ 
         personActivity.setText("absent"); 
        } 

       } 
      } 

     } 

     private JPanel getInputs() { 
      if (Inputs == null) { 
       personActivity = new JLabel(); 
       personActivity.setBounds(new Rectangle(114, 137, 77, 27)); 
       personActivity.setText(""); 
       personActivityLabel = new JLabel(); 
       personActivityLabel.setBounds(new Rectangle(7, 137, 99, 25)); 
       personActivityLabel.setText("Person Activity:"); 
       humidity = new JLabel(); 
       humidity.setBounds(new Rectangle(106, 91, 84, 27)); 
       humidity.setText(""); 
       humidityLabel = new JLabel(); 
       humidityLabel.setBounds(new Rectangle(6, 92, 88, 26)); 
       humidityLabel.setText("Humidity:"); 
       Temperature = new JLabel(); 
       Temperature.setBounds(new Rectangle(101, 50, 89, 30)); 
       Temperature.setText(""); 
       TemperatureLabel = new JLabel(); 
       TemperatureLabel.setBounds(new Rectangle(4, 50, 91, 30)); 
       TemperatureLabel.setText("Temperature:"); 
       LightIntensity = new JLabel(); 
       LightIntensity.setBounds(new Rectangle(110, 6, 84, 34)); 
       lightLabel = new JLabel(); 
       lightLabel.setBounds(new Rectangle(5, 5, 97, 34)); 
       lightLabel.setText("Light Intensity:"); 
       Inputs = new JPanel(); 
       Inputs.setLayout(null); 
       Inputs.setBounds(new Rectangle(14, 63, 200, 183)); 
       Inputs.add(lightLabel, null); 
       Inputs.add(LightIntensity, null); 
       Inputs.add(TemperatureLabel, null); 
       Inputs.add(Temperature, null); 
       Inputs.add(humidityLabel, null); 
       Inputs.add(humidity, null); 
       Inputs.add(personActivityLabel, null); 
       Inputs.add(personActivity, null); 
       th.start(); 
      } 
      return Inputs; 
     } 

     class autopilotthread implements Runnable{ 

      /** The temp. */ 
      private String[] temp; 

      /** The lightintensty. */ 
      private double lightintensty ; 

      /** The temperature. */ 
      private double temperature ; 

      /** The hum. */ 
      private double hum ; 

      /** The sens. */ 
      private String sens = null; 

      /** The humanact. */ 
      private double humanact; 

      /** The result. */ 
      private boolean [] result = {false , false}; 

      /** The fan. */ 
      private boolean fan =false; 

      /** The light. */ 
      private boolean light = false; 

      /** The pstop. */ 
      boolean pstop = false; 

      /* (non-Javadoc) 
      * @see java.lang.Runnable#run() 
      */ 
      @Override 
      public void run() { 
       System.out.println("thread start!"); 
       while(true){ 
        System.out.println("thread loop!"); 
         try { 
          if(vd.gethumanActivity()){ 
           humanact = 250; 
          }else{ 
           humanact = 0; 
          } 
         } catch (RemoteException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         sens = arduino.getSensor(); 
         temp = sens.split(","); 
         lightintensty = Double.parseDouble(temp[1]); 
         temperature = Double.parseDouble(temp[0]); 
         hum = Double.parseDouble(temp[2]); 
         double [] out ={humanact ,lightintensty , hum, Time.now(),temperature }; 
         System.out.println(""+out[0]+" "+out[1]+" "+out[2]+" "+out[3]+" "+out[4]); 
         result = Matlab.output(out); 
         light = result[1]; 
         fan = result[0]; 
         System.out.println("light:" + light); 
         System.out.println("fan:" + fan); 
         if(light){ 
          try {X10.lightsOn();} 
          catch (IOException e) {e.printStackTrace();} 

         }else{ 
          try {X10.lightsOff();} 
          catch (IOException e) {e.printStackTrace();} 

         } 

         if(fan){ 
          try {X10.fanOn();} 
          catch (IOException e) {e.printStackTrace();} 

         }else{ 
          try {X10.fanOff();} 
          catch (IOException e) {e.printStackTrace();} 

         } 



        try {TimeUnit.SECONDS.sleep(10);} 
        catch (InterruptedException e) {e.printStackTrace();} 

        if (pstop){ 
         break; 
        } 
       } 
       System.out.println("thread stop!"); 

      } 

     } 

     class Pilotmouse implements MouseListener{ 

      /** The p thread. */ 
      autopilotthread pThread = null; 

      /** The pt. */ 
      Thread pt = null; 

      /** 
      * Instantiates a new pilotmouse. 
      */ 
      Pilotmouse(){ 

      } 

      /* (non-Javadoc) 
      * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) 
      */ 
      @Override 
      public void mouseClicked(MouseEvent arg0) { 
       // TODO Auto-generated method stub 

      } 

      /* (non-Javadoc) 
      * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent) 
      */ 
      @Override 
      public void mouseEntered(MouseEvent arg0) { 
       // TODO Auto-generated method stub 

      } 

      /* (non-Javadoc) 
      * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent) 
      */ 
      @Override 
      public void mouseExited(MouseEvent arg0) { 
       // TODO Auto-generated method stub 

      } 

      /* (non-Javadoc) 
      * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent) 
      */ 
      @Override 
      public void mousePressed(MouseEvent arg0) { 
       // TODO Auto-generated method stub 

      } 

      /* (non-Javadoc) 
      * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent) 
      */ 
      @Override 
      public void mouseReleased(java.awt.event.MouseEvent e) { 
       if ((autopilotlable.getText().equalsIgnoreCase("off"))){ 
        autopilotlable.setText("on"); 
        pThread = new autopilotthread(); 
        pt = new Thread(pThread); 
        pt.start(); 

       } else if ((autopilotlable.getText().equalsIgnoreCase("on"))){ 
        autopilotlable.setText("off"); 
        pThread.pstop = true; 
       } 
      } 

     } 


     private JButton getAutopilot() { 


      if (autopilot == null) { 
       autopilot = new JButton(); 
       autopilot.setBounds(new Rectangle(18, 14, 112, 28)); 
       autopilot.setText("Auto Pilot"); 

       autopilot.addMouseListener(new Pilotmouse()); 
      } 
      return autopilot; 
     } 


     public static void main(String[] args) { 
      SwingUtilities.invokeLater(new Runnable() { 
       public void run() { 
        GUI application = new GUI(); 
        application.getJFrame().setVisible(true); 
       } 
      }); 

     } 

    } 
+3

あなたは一例を示してもらえますか? –

答えて

2

Jochenは、Eclipseリファクタリングツールを使用することができたと述べています。しかしそれは設計上の問題を解決しません。

は、一般的に:

  • GUIは、約14のクラスを知っているし、いくつかのより高いレベル のクラスに... として大きな伝達物質として作用し、それが グループロジックすることが可能であるとGUIはそれらを使用していますか?
  • あなたのコードはオブジェクト構成 とロジックをミックスしています。これらのアクションを別の場所に移動してください
  • コンストラクタ内でスレッドを開始しないでください!
  • 論理 ステートメントの使用法を改訂してください。例えば。 : while(true){... if (pstop){break; }}
  • X10サードパーティクラスですか?それはあなたがグローバル 状態を削除しようとするなら は、(例えば、状態 変化に対してX10 とインスタンス変数の単一のインスタンスを使用しない静的なもの。)

最も重要なアドバイス:この機能のためのユニットテストを書くためにしてみてくださいを最初に(例えば)junitとmockitoを使用し、良いデザインが自然に来るでしょう。私を信じてください!

EDIT:

Good talk about JMM

Good book about concurrency

EDIT:

The Clean Code Talks - "Global State and Singletons"

+0

ありがとうpetro私はなぜ知っているコンストラクタ内のスレッドを開始しないでください?私はメインでそれを開始する必要がありますか?しかし、スレッドは、GUIの終了後に停止する必要があります.... – wizztjh

+2

まずは、私はすみません。あなたはコード内のコンストラクタ内でスレッドを開始していません。このトピックはすでにBrian Goetzの記事です:http://www.ibm.com/developerworks/java/library/j-jtp0618.html –

+0

こんにちは、私のプログラムには、リスト1の問題があります。ブライアン・ゲーツの記事ですが、どうすれば解決できますか?揮発性を使用して?同期された "? – wizztjh

1

を表示するために洗浄されたバージョンです。

関連する問題