2012-03-31 13 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

그래서 전 세계에 선언을 추가하려면 무엇을 추가해야합니까? –

관련 문제