Nút New File không chạy được

Cho em hỏi, cái nút New File của em sao nó không chạy được. Mong mọi người giúp em

import java.io.*;
import java.util.Date;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.filechooser.FileSystemView;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;
import javax.swing.tree.*;
public class Explorer extends JFrame implements ActionListener{
	private JPanel contentPane;
	private	FileSystemView fsv;
	private JTable table;
	private String PathNow, Pathold, thisfile="", active;
	private JProgressBar progressBar;
	private  JButton btnNewFile, btnNewFolder, btnCut, btnDelete, btnParent, btnRename, btnCopy, btnPaste;
	File Now;

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Explorer frame = new Explorer();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Explorer() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 812, 537);

		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		setVisible(true);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 11, 249, 458);
		contentPane.add(scrollPane);
		
		DefaultMutableTreeNode root = new DefaultMutableTreeNode();
		fsv = FileSystemView.getFileSystemView();
		File[] roots = fsv.getRoots();
		for (File f : roots) {
			DefaultMutableTreeNode node = new DefaultMutableTreeNode(f);
			root.add( node );
			showchildren(node);
		}
		DefaultTreeModel treemodel = new DefaultTreeModel(root);
		JTree tree = new JTree(treemodel);
		
		tree.setRootVisible(false);
		scrollPane.setViewportView(tree);	
		
		JScrollPane scrollPane_1 = new JScrollPane();
        scrollPane_1.setBounds(271, 29, 506, 440);
        contentPane.add(scrollPane_1);
		
		table = new JTable();
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setAutoCreateRowSorter(true);
        table.setShowVerticalLines(false);
        table.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mousePressed(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseExited(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseEntered(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseClicked(MouseEvent arg0) {
				try {
					PathNow = String.valueOf(table.getValueAt(table.getSelectedRow(), 2));
					if (arg0.getClickCount() == 2) {
					    File f = new File(String.valueOf(table.getValueAt(table.getSelectedRow(), 2)));
					    if(f.isFile())
							try {
								Desktop.getDesktop().open(f);
							} catch (IOException e) {
							}
					    else {
					    	File files[] = fsv.getFiles(f, true);
					    	table.removeAll();
					    	ResetTableData(files);
					    }
					    Now = new File(PathNow);
					    Pathold = PathNow;
					  }
				} catch (Exception e) {
					// TODO: handle exception
				}				
			}
		});
        scrollPane_1.setViewportView(table);
       
		tree.addTreeSelectionListener(new TreeSelectionListener() {
			@Override
			public void valueChanged(TreeSelectionEvent arg0) {
				DefaultMutableTreeNode node = (DefaultMutableTreeNode) arg0.getPath().getLastPathComponent();
				showchildren(node);
				File f = (File) node.getUserObject();
				File[] files = fsv.getFiles(f, true);
				ResetTableData(files);
				Now = f;
			}
		});
        tree.expandRow(0);
        tree.setCellRenderer(new FileTreeCellRenderer());
        
        progressBar = new JProgressBar();
        progressBar.setBounds(687, 6, 100, 10);
        contentPane.add(progressBar);
        progressBar.setVisible(false);
        progressBar.setIndeterminate(false);
        
        btnParent = new JButton();
        btnParent.setBounds(271, 0, 37, 30);
        btnParent.setIcon(new ImageIcon("D:\\LapTrinhJava\\Thi\\IMG\\cut.png"));
        btnParent.addActionListener(this);
        contentPane.add(btnParent);
        
        btnNewFile = new JButton();
        btnNewFile.setBounds(320, 0, 37, 30);
        btnNewFile.setIcon(new ImageIcon(".//IMG//newfile.png"));
        btnNewFile.addActionListener(this);
        contentPane.add(btnNewFile);
        
        btnNewFolder = new JButton();
        btnNewFolder.setBounds(369, 0, 37, 30);
        btnNewFolder.setIcon(new ImageIcon(".//IMG//newfolder.png"));
        btnNewFolder.addActionListener(this);
        contentPane.add(btnNewFolder);
        
        btnCut = new JButton();
        btnCut.setBounds(418, 0, 37, 30);
        btnCut.addActionListener(this);
        btnCut.setIcon(new ImageIcon("D:\\LapTrinhJava\\Thi\\IMG\\cut (1).png"));
        //btnCut.setText("Cut");
        contentPane.add(btnCut);
        
        btnCopy = new JButton();
        btnCopy.setBounds(472, 0, 37, 30);
        btnCopy.addActionListener(this);
        btnCopy.setIcon(new ImageIcon(".//IMG//copy.png"));
        contentPane.add(btnCopy);
        
        btnPaste = new JButton();
        btnPaste.setBounds(521, 0, 37, 30);
        btnPaste.addActionListener(this);
        //btnPaste.setIcon(new ImageIcon(".//IMG//paste.png"));
        btnParent.setText("Paste");
        contentPane.add(btnPaste);
        
        btnRename = new JButton();
        btnRename.setBounds(570, 0, 37, 30);
        btnRename.addActionListener(this);
        btnRename.setIcon(new ImageIcon(".//IMG//rename.png"));
        contentPane.add(btnRename);
        
        btnDelete = new JButton();
        btnDelete.setBounds(619, 0, 37, 30);
        btnDelete.addActionListener(this);
        btnDelete.setIcon(new ImageIcon(".//IMG//delete.png"));
        contentPane.add(btnDelete);
        
        JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		
		JMenu mnMenu = new JMenu("File Explorer");
		menuBar.add(mnMenu);
		
		JMenu mnNew = new JMenu("New");
		mnMenu.add(mnNew);
		
		JMenuItem mntmFile = new JMenuItem("File");
		mnNew.add(mntmFile);
		
		JMenuItem mntmFolder = new JMenuItem("Folder");
		mnNew.add(mntmFolder);
		
		JMenuItem mntmCopy = new JMenuItem("Copy");
		mnMenu.add(mntmCopy);
		
		JMenuItem mntmCut = new JMenuItem("Cut");
		mnMenu.add(mntmCut);
		
		JMenuItem mntmDelete = new JMenuItem("Delete");
		mnMenu.add(mntmDelete);
		
		JMenuItem mntmPaste = new JMenuItem("Paste");
		mnMenu.add(mntmPaste);
		
		JMenuItem mntmRename = new JMenuItem("Rename");
		mnMenu.add(mntmRename);
        
        mntmCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
        mntmPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK));
		mntmFolder.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
		mntmCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK));
		mntmFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK | ActionEvent.SHIFT_MASK));
		
		mntmCopy.addActionListener(this);
		mntmCut.addActionListener(this);
		mntmRename.addActionListener(this);
		mntmPaste.addActionListener(this);
		mntmDelete.addActionListener(this);
	}
	
	public void ResetTableData(File[] files) {
		table.setModel(new FileTableModel(files));
		table.setRowHeight( 25 );
        setColumnWidth(0,-1);
        setColumnWidth(3,60);
        table.getColumnModel().getColumn(3).setMaxWidth(120);
        setColumnWidth(4,-1);
	}
	
	public void showchildren(DefaultMutableTreeNode node) {
		node.removeAllChildren();
		File f = (File) node.getUserObject();
		File[] files = fsv.getFiles(f, true);
		for (File file : files) {
			if(file.isDirectory()) {
				node.add(new DefaultMutableTreeNode(file));
			}
		}
	}
	private void setColumnWidth(int column, int width) {
        TableColumn tableColumn = table.getColumnModel().getColumn(column);
        if (width<0) {
            JLabel label = new JLabel( (String)tableColumn.getHeaderValue() );
            Dimension preferred = label.getPreferredSize();
            width = (int)preferred.getWidth()+14;
        }
        tableColumn.setPreferredWidth(width);
        tableColumn.setMaxWidth(width);
        tableColumn.setMinWidth(width);
    }
	
	public void CopyFile(File fold, File fnew) {
		try {
			if(fnew.exists()) {
				JOptionPane.showMessageDialog(null, "File "+fnew.getName(), "Error!", 0);
				return;
			}
			else {
				progressBar.setVisible(true);
		        progressBar.setIndeterminate(true);
				Thread t = new Thread(new Runnable() {
					
					@Override
					public void run() {
						try {
							fnew.createNewFile();
							FileInputStream fis = new FileInputStream(fold);
							FileOutputStream fos = new FileOutputStream(fnew);
							int c;
							while((c=fis.read())!=-1) {
								fos.write((char) c);
							}
							fnew.setExecutable(fold.canExecute());
							fnew.setReadable(fold.canRead());
							fnew.setWritable(fold.canWrite());
							fis.close();
							fos.close();
							progressBar.setVisible(false);
					        progressBar.setIndeterminate(false);
					        JOptionPane.showMessageDialog(null, active+" done!" );
							active="";
						} catch (IOException e) {}
					}
				});
				t.setDaemon(true);
				t.start();
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	
	public void CutFile(File fold, File fnew) {
		try {
			if(fnew.exists()) return;
			else {
				progressBar.setVisible(true);
		        progressBar.setIndeterminate(true);
				Thread t = new Thread(new Runnable() {
					
					@Override
					public void run() {
						// TODO Auto-generated method stub
						try {
							fnew.createNewFile();
							FileInputStream fis = new FileInputStream(fold);
							FileOutputStream fos = new FileOutputStream(fnew);
							int c;
							while((c=fis.read())!=-1) {
								fos.write((char) c);
							}
							fnew.setExecutable(fold.canExecute());
							fnew.setReadable(fold.canRead());
							fnew.setWritable(fold.canWrite());
							fis.close();
							fos.close();
							fold.delete();
							JOptionPane.showMessageDialog(null, active+" done!" );
							active="";
							progressBar.setVisible(false);
					        progressBar.setIndeterminate(false);
						} catch (IOException e) {}
					}
				});
				t.setDaemon(true);
				t.start();
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	
	public void DeleteFile(File f) {
		try {
			if(f.isFile()) {
				 f.delete();
			}
			else {
				File files[] = f.listFiles();
				if(files.length==0) f.delete();
				else {
					for (File file : files) {
						if(f.isFile()) f.delete();
						else DeleteFile(file);
					}
					f.delete();
				}
				f.delete();
			}
		} catch (Exception e) {
		}
	}
	
	public void NewFile(String path) {
		
		try {
			progressBar.setVisible(true);
	        progressBar.setIndeterminate(true);
			String name = JOptionPane.showInputDialog("Input file name");
			if(name==null) return;
			else {
				File f = new File(path, name);
				if(f.exists()) {
					JOptionPane.showMessageDialog(null, "Error", "File existed! Can't create!", 0);
					return;
				}else {
					if(f.createNewFile()==false) {
						JOptionPane.showMessageDialog(null, "Error", "Can't create!", 0);
					}
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	
	public void NewFolder(String path) {
		try {
			String name = JOptionPane.showInputDialog("Input folder name");
			if(name==null) return;
			else {
				File f = new File(path, name);
				if(f.exists()) {
					JOptionPane.showMessageDialog(null, "Error", "folder existed! Can't create!", 0);
					return;
				}else {
					if(f.mkdir()==false) {
						JOptionPane.showMessageDialog(null, "Error", "Can't create!", 0);
					}
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

	//
	@Override
	public void actionPerformed(ActionEvent arg0) {
		if(arg0.getActionCommand().equals("Paste")|| arg0.getSource()==btnPaste ) {
			if(thisfile==null) return;
			else {
				File fold = new File(thisfile);
				File fnew = new File(PathNow,fold.getName());
				if(fold==null || fnew==null) System.out.println("lỗi");//return;
				else {
					if(active.equals("Copy")) CopyFile(fold, fnew);
					else if(active.equals("Cut")) CutFile(fold, fnew);
					File f = fnew.getParentFile();
					File[] files = fsv.getFiles(f, true);
					ResetTableData(files);
				}
				
			}
		}
		else if(arg0.getActionCommand().equals("Delete")|| arg0.getSource()==btnDelete) {
			File f = new File(PathNow);
			if(JOptionPane.showConfirmDialog(null, "Are you sure?","Delete "+ f.getName(),2)==JOptionPane.OK_OPTION) {
				DeleteFile(f);
				JOptionPane.showMessageDialog(null, "Deleted!");
			}
			else return;
			File fa = f.getParentFile();
			File[] files = fsv.getFiles(fa, true);
			ResetTableData(files);
		}
		else if(arg0.getActionCommand().equals("Rename")|| arg0.getSource()==btnRename) {
			try {
				File fold = new File(PathNow);
				String newname = JOptionPane.showInputDialog(null, "New name?", "Rename", 1);
				File fnew = new File(fold.getParent(),newname );
				fold.renameTo(fnew);
				JOptionPane.showMessageDialog(null, "Rename done!");
				File f = fold.getParentFile();
				File[] files = fsv.getFiles(f, true);
				ResetTableData(files);
			} catch (Exception e) {
			}
		}
		else if(arg0.getActionCommand().equals("Cut")|| arg0.getSource()==btnCut) {
			thisfile = PathNow;
			active = "Cut";
		}
		else if(arg0.getActionCommand().equals("Copy")|| arg0.getSource()==btnCopy){
			thisfile = PathNow;
			active = "Copy";
		}
		else if(arg0.getSource()==btnParent) {
			try {
				File[] files = fsv.getFiles(Now.getParentFile(), true);
				ResetTableData(files);
				Now = Now.getParentFile();
			} catch (Exception e) {
			}  
		}
		else if(arg0.getActionCommand().equals("File")|| arg0.getSource()==btnNewFile) {
			NewFile(PathNow);
			File f = new File(PathNow);
			File[] files = fsv.getFiles(f, true);
			ResetTableData(files);
		}
		else if(arg0.getActionCommand().equals("Folder")|| arg0.getSource()==btnNewFolder) {
			try {
				NewFolder(PathNow);
				File f = new File(PathNow);
				File[] files = fsv.getFiles(f, true);
				ResetTableData(files);
			} catch (Exception e) {
				System.out.println();
			}
		}
	}
}


class FileTableModel extends AbstractTableModel {

    private File[] files;
    private FileSystemView fileSystemView = FileSystemView.getFileSystemView();
    private String[] columns = {
        "Icon",
        "File",
        "Path/name",
        "Size",
        "Last Modified"
    };

    FileTableModel(File[] files) {
        this.files = files;
    }

    public Object getValueAt(int row, int column) {
        File file = files[row];
        switch (column) {
            case 0:
                return fileSystemView.getSystemIcon(file);
            case 1:
                return fileSystemView.getSystemDisplayName(file);
            case 2:
                return file.getPath();
            case 3:
                return file.length();
            case 4:
                return file.lastModified();
        }
        return "";
    }

    public int getColumnCount() {
        return columns.length;
    }

    public Class<?> getColumnClass(int column) {
        switch (column) {
            case 0:
                return ImageIcon.class;
            case 3:
                return Long.class;
            case 4:
                return Date.class;
        }
        return String.class;
    }

    public String getColumnName(int column) {
        return columns[column];
    }

    public int getRowCount() {
        return files.length;
    }

    public File getFile(int row) {
        return files[row];
    }

    public void setFiles(File[] files) {
        this.files = files;
        fireTableDataChanged();
    }
}

Do đoạn này:

Hay do đoạn này:

Do đoạn nào không chạy?
Bạn nên nêu rõ do sự kiện không xảy ra hay do phương thức kia không hoạt động tốt.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?