我正在制作一个备份程序,我希望我在JTextArea上显示备份程序的所有内容.好吧,它工作,但只有在程序完成备份后.我该如何解决?我运行的代码在这里:
备份方法
public void startBackup() throws Exception {
// txtarea is the JTextArea
Panel.txtArea.append("Starting Backup...\n");
for (int i = 0; i < al.size(); i++) {
//al is an ArrayList that holds all of the backup assignments selected
// from the JFileChooser
File file = new File((String) al.get(i));
File directory = new File(dir);
CopyFolder.copyFolder(file, directory);
}
}
Run Code Online (Sandbox Code Playgroud)
复制文件夹类:
public class CopyFolder {
public static void copyFolder(File src, File dest) throws IOException {
if (src.isDirectory()) {
// if directory not exists, create …Run Code Online (Sandbox Code Playgroud) 我正在尝试用Java编写一个简单的游戏.的基本结构是一个单一的JFrame具有不同JPanels的是我添加/在不同的时间取出.在启动时,有JPanel一个基本菜单(开始游戏,高分等).按下"开始"按钮后,它会切换到一个水平选择器面板,其中有三个按钮可选择游戏的难度级别.按下三个按钮中的任何一个后,它会切换到另一个面板,该面板将显示三秒倒计时,然后是实际游戏.所有三个按钮都调用相同的方法,只是传入了不同的难度值.
我有所有单独的部分工作正常,但我有从水平选择面板到倒计时的过渡的麻烦.如果我不使用线程,屏幕会在按下按钮时冻结,并且不会切换到新面板.我已经尝试过搞乱线程了,但是我对它们知之甚少,并且只取得了有限的成功(我已经得到它所以它会成功切换一些时间,但不是一贯的).
在代码方面,在级别选择面板中我有类似按钮点击的内容:
private class ButtonClickedListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {
gui.newLevel(1);
}
}
Run Code Online (Sandbox Code Playgroud)
代替gui.newLevel(1)我刚刚搞砸了开始新线程并从中调用方法.
该newLevel()方法是这样的:
getContentPane().removeAll();
levelPanel = new LevelPanel(levelNum, this);
add(levelPanel);
validate();
levelPanel.start();
Run Code Online (Sandbox Code Playgroud)
从开始菜单切换JPanel到关卡选择器面板(再次使用ActionListener按钮)时,我使用非常相似的代码,这很好用.
LevelPanel的start()方法初始化new的值JPanel并newLevel()在显示实际游戏之前显示屏幕上的倒计时(当前使用以下代码,尽管我在方法中添加了类似的东西):
try {
Thread.sleep(1000);
//update countdown number
validate();
repaint();
Thread.sleep(1000);
//update countdown number
validate();
repaint();
Thread.sleep(1000);
//update countdown number
validate();
repaint();
} catch (Exception e) {
System.out.println(e);
}
//start game
Run Code Online (Sandbox Code Playgroud)
我真的很感激任何帮助使这个代码工作,我很确定某种线程是要走的路,但我不太确定在哪里/如何.任何建议和/或代码示例都会很棒! …