java - 无法解析为变量

标签 java string variables stream

好的,所以,我在编写这个程序时遇到了问题,它似乎一切正常,除了最后一件事,它一直说它无法将计算解析为变量。这是我的代码。我需要将字符串计算显示在窗口上。

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();

}

}

最佳答案

您在 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
    }
}

关于java - 无法解析为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9952339/

相关文章:

java - 基于 TableView 自动更改 TableModel?

java - 如果不包含短语,则删除整行

java - 本地字符串文字的内存分配?

c - 这段代码有什么问题?

c# - 为什么使用单个变量作为条件评估?

linux - 在 bash 中使用带有命令的变量

java - 如何在没有 By 定位器的情况下使用 WebDriverWait.until?

java - 如何反编译泛型中的桥接方法?

java - 重新提示用户在java中输入有效的输入

c++ - 除了 increment 语句外,如何制作 for 循环变量 const?