Не удается разрешить переменную - PullRequest
1 голос
/ 31 марта 2012

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

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 ]

2 голосов
/ 31 марта 2012

Вы объявляете 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
    }
}
1 голос
/ 31 марта 2012

На этой строке:

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

вычисление не объявлено !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...