2012-03-31 71 views
1

私はこのプログラムの書き方に問題があります。この最後のものを除いて、すべてがうまくいくように見えます。私のコードをheres。私は計算された文字列をウィンドウに表示させる必要があります。この行で変数に解決することができません

import java.awt.*; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import javax.swing.*; 

public class Mover { 
    public static void main(String[] args) throws IOException, InterruptedException { 

     String usb = new File(".").getAbsolutePath(); 
     String user = System.getProperty("user.home") + "/Desktop"; 
     File TS3S = new File(usb + "/Teamspeak 3"); 
     File TS3D = new File(user + "/TS3"); 
     File MinecraftLauncherS = new File(usb + "/Minecraft"); 
     File MinecraftLauncherD = new File(user); 
     File ShortcutS = new File(usb + "/Shortcuts"); 
     File ShortcutD = new File(user); 
     File MinecraftFilesS = new File(usb + "/minecraft files"); 
     File MinecraftFilesD = new File(user + "/Application Data"); 

     //make sure source exists 
     if(!TS3S.exists()){ 

      System.out.println("Directory does not exist."); 
      //just exit 
      System.exit(0); 

     }else{ 

      try{ 
      copyFolder(TS3S,TS3D); 
      }catch(IOException e){ 
      e.printStackTrace(); 
      //error, just exit 
       System.exit(0); 
      } 
     } 

     //make sure source exists 
     if(!MinecraftLauncherS.exists()){ 

      System.out.println("Directory does not exist."); 
      //just exit 
      System.exit(0); 

     }else{ 

      try{ 
      copyFolder(MinecraftLauncherS,MinecraftLauncherD); 
      }catch(IOException e){ 
      e.printStackTrace(); 
      //error, just exit 
       System.exit(0); 
      } 
     } 

     //make sure source exists 
     if(!ShortcutS.exists()){ 

      System.out.println("Directory does not exist."); 
      //just exit 
      System.exit(0); 

     }else{ 

      try{ 
      copyFolder(ShortcutS,ShortcutD); 
      }catch(IOException e){ 
      e.printStackTrace(); 
      //error, just exit 
       System.exit(0); 
      } 
     } 

     //make sure source exists 
     if(!MinecraftFilesS.exists()){ 

      System.out.println("Directory does not exist."); 
      //just exit 
      System.exit(0); 

     }else{ 

      try{ 
      copyFolder(MinecraftFilesS,MinecraftFilesD); 
      }catch(IOException e){ 
      e.printStackTrace(); 
      //error, just exit 
       System.exit(0); 
      } 
     } 


     System.out.println("Done"); 
     Runtime.getRuntime().exec (user + "/TS3/ts3client_win32.exe"); 
     System.exit(0); 
     } 

    public static void copyFolder(File src, File dest) 
     throws IOException{ 

     if(src.isDirectory()){ 

      //if directory not exists, create it 
      if(!dest.exists()){ 
       dest.mkdir(); 
       System.out.println("Directory copied from " 
           + src + " to " + dest); 
      } 

      //list all the directory contents 
      String files[] = src.list(); 

      for (String file : files) { 
       //construct the src and dest file structure 
       File srcFile = new File(src, file); 
       File destFile = new File(dest, file); 
       //recursive copy 
       copyFolder(srcFile,destFile); 
      } 

     }else{ 
      //if file, then copy it 
      //Use bytes stream to support all file types 
      InputStream in = new FileInputStream(src); 
       OutputStream out = new FileOutputStream(dest); 

       byte[] buffer = new byte[1024]; 

       int length; 
       //copy the file content in bytes 
       while ((length = in.read(buffer)) > 0){ 
        out.write(buffer, 0, length); 
       } 

       in.close(); 
       out.close(); 
       System.out.println("File copied from " + src + " to " + dest); 

       //read it with BufferedReader 
       BufferedReader br 
        = new BufferedReader(
         new InputStreamReader(in)); 

       StringBuilder sb = new StringBuilder(); 

       String compute; 
       while ((compute = br.readLine()) != null) { 
        sb.append(compute); 
       } 
     } 
    } 
private static void createWindow() { 

    //Create and set up the window. 
    JFrame a = new JFrame("Processing...."); 
    a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JLabel b = new JLabel(compute,SwingConstants.CENTER); 
    b.setPreferredSize(new Dimension(300, 100)); 
    a.getContentPane().add(b, BorderLayout.CENTER); 

    //Display the window. 
    a.setLocationRelativeTo(null); 
    a.pack(); 
    a.setVisible(true); 
} 

public static void window(String[] args) { 

    createWindow(); 

} 

}

答えて

2

あなたはcopyFolder()関数内のローカル変数として計算を宣言したがのcreateWindow機能でそれを使用して、それがのcreateWindow機能で範囲外であるされている

あなたはそれをクラスレベルの変数を作成して行うことができます静的にメソッドにアクセスするのではなく、インスタンスを取得するための新しいクラス

public class Mover { 

    //make it public if you want to access it directly from an instance (object) 
    //of this class (myMover), else keep it private - it will be accessible only 
    //in this class 
    //you could also make it static but that will have limitations (can be accessed 
    //only from static functions and value will be shared by all objects of this class 
    public String compute; 

    public static void main(String[] args) throws IOException, InterruptedException { 
     //an object of this class needs to be created only if compute is non-static 
     Mover myMover = new Mover(); 

     //access compute variable using myMover.compute 

     // invoke your methods using myMover.copyFolder() etc 
    } 
} 
+0

どうすればいいのですか?私はまだこの言語には比較的新しいので、いくつかのサンプルコードが必要です。 –

+0

サンプルコード –

+0

の私の編集を参照してくださいクラスレベルで追加する方法を参照してください私の編集を参照してください –

1

JLabel b = new JLabel(compute,SwingConstants.CENTER); 

計算が宣言されていません!

+0

どのように宣言できますか? –

+0

あなたが望むものによって異なります。あなたはそれをグローバルに宣言してから始めることができます。それから、あなたはいつでもcopyFolderメソッドでそれを変更することができます。 –

+0

それをグローバルに宣言するには、何を追加する必要がありますか? –

関連する問題