好的,所以,我在编写这个程序时遇到了问题,它似乎都能工作,除了最后一件事,它一直说它无法将计算解析为变量。这是我的密码。我需要使字符串计算显示在窗口上。
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
}
}
在这一行:
JLabel b = new JLabel(compute,SwingConstants.CENTER);
未声明计算!!!