无法解析为变量

时间:2012-03-31 01:51:46

标签: java string variables stream

好吧,所以,即时通讯在编写这个程序时遇到了麻烦,这一切似乎都有效,除了最后一件事,它一直说它无法将计算解析为变量。继承我的代码。我需要让字符串compute显示在窗口上。

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 个答案:

答案 0 :(得分:2)

您在copyFolder()函数中将compute声明为局部变量,但在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 :(得分:1)

在这一行:

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

未声明计算!!!