2012-03-31 3 views
1

Итак, у меня возникли проблемы с этой программой im writing, все работает, за исключением этой последней вещи, она продолжает говорить, что она не может разрешить вычисление переменной. это мой код. Мне нужно сделать вывод строки в окне.Невозможно разрешить переменную

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

Вы объявляете Compute как локальные переменные в функции 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

Чтобы объявить его глобально, что мне нужно добавить? –

Смежные вопросы