如何在java swing中同时执行两个线程?

时间:2011-11-21 04:15:25

标签: java swing

我的目标是选择所有以MANI.txt命名的文件,这些文件存在于各自的文件夹中,然后加载表中不同位置的MANI.txt个文件的路径。在我加载表格中的路径后,我习惯选择所需的路径并修改它们 要加载MANI.txt文件需要更多时间,因为它可能会在我的工作区中出现超过30次等,直到加载文件我想在ProgessBar的帮助下向用户发出警报。列表大小已填充我需要禁用ProgressBar

有人可以帮我解决这个问题吗?

import java.awt.*;     
import javax.swing.*;     
import javax.swing.table.*;     
import java.awt.event.*;     
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class JTableHeaderCheckBox extends JFrame implements ActionListener    
 {     
  Object colNames[] = {"", "Path"};     
  Object[][] data = {};     
  DefaultTableModel dtm;     
  JTable table;    
  JButton but;
  java.util.List list;
   public void buildGUI()     
    {     
     dtm = new DefaultTableModel(data,colNames);     
     table = new JTable(dtm); 
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

     int vColIndex = 0;
     TableColumn col = table.getColumnModel().getColumn(vColIndex);
     int width = 10;
     col.setPreferredWidth(width);
     int vColIndex1 = 1;
     TableColumn col1 = table.getColumnModel().getColumn(vColIndex1);
     int width1 = 500;
     col1.setPreferredWidth(width1);
     JFileChooser    chooser = new JFileChooser(); 
     //chooser.setCurrentDirectory(new java.io.File("."));
     chooser.setDialogTitle("Choose workSpace Path");
     chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
     chooser.setAcceptAllFileFilterUsed(false);
     if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION){ 
        System.out.println("getCurrentDirectory(): " + chooser.getCurrentDirectory());
        System.out.println("getSelectedFile() : " + chooser.getSelectedFile().getAbsolutePath());
    }
    String path= chooser.getSelectedFile().getAbsolutePath();
    File folder = new File(path); 

这里我需要进度条

GatheringFiles ob = new GatheringFiles();
              list=ob.returnlist(folder);

    for(int x = 0; x < list.size(); x++)     
    {     
        dtm.addRow(new Object[]{new Boolean(false),list.get(x).toString()});     
    }     
 JPanel pan = new JPanel();
 JScrollPane sp = new JScrollPane(table);     
 TableColumn tc = table.getColumnModel().getColumn(0);     
 tc.setCellEditor(table.getDefaultEditor(Boolean.class));     
 tc.setCellRenderer(table.getDefaultRenderer(Boolean.class));     
 tc.setHeaderRenderer(new CheckBoxHeader(new MyItemListener()));     
 but = new JButton("REMOVE");
 JFrame f = new JFrame();     
 pan.add(sp); 
 but.move(650, 50);
 but.addActionListener(this);
 pan.add(but);

 f.add(pan);
 f.setSize(700, 100);
 f.pack();     
 f.setLocationRelativeTo(null);     
 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
 f.setVisible(true);     
}     
class MyItemListener implements ItemListener     
{     
    public void itemStateChanged(ItemEvent e) {     
        Object source = e.getSource();     
        if (source instanceof AbstractButton == false) return;     
        boolean checked = e.getStateChange() == ItemEvent.SELECTED;     
        for(int x = 0, y = table.getRowCount(); x < y; x++)     
        {     
            table.setValueAt(new Boolean(checked),x,0);     
        }     
    }     
}    

public static void main (String[] args)     
{     
    SwingUtilities.invokeLater(new Runnable(){     
        public void run(){     
            new JTableHeaderCheckBox().buildGUI();     
        }     
    });     
}

public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==but)
{
    System.err.println("table.getRowCount()"+table.getRowCount());
for(int x = 0, y = table.getRowCount(); x < y; x++)     
    {
    if("true".equals(table.getValueAt(x, 0).toString()))
    {
        System.err.println(table.getValueAt(x, 0)); 
        System.err.println(list.get(x).toString());
        delete(list.get(x).toString());
    }

    }
}

}     
public void delete(String a)
{

String delete = "C:"; 

     System.err.println(a);
try {
    File inFile = new File(a);

            if (!inFile.isFile()) {
                System.out.println("Parameter is not an existing file");
                return;
            }

            //Construct the new file that will later be renamed to the original filename. 
            File tempFile = new File(inFile.getAbsolutePath() + ".tmp");

            BufferedReader br = new BufferedReader(new FileReader(inFile));
            PrintWriter pw = new PrintWriter(new FileWriter(tempFile));

            String line = null;

            //Read from the original file and write to the new 
            //unless content matches data to be removed.
            while ((line = br.readLine()) != null) {
                System.err.println(line);
                line = line.replace(delete, " "); 
                    pw.println(line);
                    pw.flush();

            }
            pw.close();
            br.close();

            //Delete the original file
            if (!inFile.delete()) {
                System.out.println("Could not delete file");
                return;
            } 

            //Rename the new file to the filename the original file had.
            if (!tempFile.renameTo(inFile))
                System.out.println("Could not rename file");

        }
        catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }

}     
class CheckBoxHeader extends JCheckBox     
    implements TableCellRenderer, MouseListener {     
protected CheckBoxHeader rendererComponent;     
protected int column;     
protected boolean mousePressed = false;     
public CheckBoxHeader(ItemListener itemListener) {     
    rendererComponent = this;     
    rendererComponent.addItemListener(itemListener);     
}     
public Component getTableCellRendererComponent(     
        JTable table, Object value,     
        boolean isSelected, boolean hasFocus, int row, int column) {     
    if (table != null) {     
        JTableHeader header = table.getTableHeader();     
        if (header != null) {     
            rendererComponent.setForeground(header.getForeground());     
            rendererComponent.setBackground(header.getBackground());     
            rendererComponent.setFont(header.getFont());     
            header.addMouseListener(rendererComponent);     
        }     
    }     
    setColumn(column);     
    rendererComponent.setText("Check All");     
    setBorder(UIManager.getBorder("TableHeader.cellBorder"));     
    return rendererComponent;     
}     
protected void setColumn(int column) {     
    this.column = column;     
}     
public int getColumn() {     
    return column;     
}     
protected void handleClickEvent(MouseEvent e) {     
    if (mousePressed) {     
        mousePressed=false;     
        JTableHeader header = (JTableHeader)(e.getSource());     
        JTable tableView = header.getTable();     
        TableColumnModel columnModel = tableView.getColumnModel();     
        int viewColumn = columnModel.getColumnIndexAtX(e.getX());     
        int column = tableView.convertColumnIndexToModel(viewColumn);     

        if (viewColumn == this.column && e.getClickCount() == 1 && column != -1) {     
            doClick();     
        }     
    }     
}     
public void mouseClicked(MouseEvent e) {     
    handleClickEvent(e);     
    ((JTableHeader)e.getSource()).repaint();     
}     
public void mousePressed(MouseEvent e) {     
    mousePressed = true;     
}     
public void mouseReleased(MouseEvent e) {     
}     
public void mouseEntered(MouseEvent e) {     
}     
public void mouseExited(MouseEvent e) {     
}     
}    


******************


 import java.io.File; 
 import java.util.*; 
 public class GatheringFiles { 
 public static List returnlist(File folder) { 
 List<File> list = new ArrayList<File>(); 
 List<File> list1 = new ArrayList<File>(); 
getFiles(folder, list); 
return list;
} 
 private static void getFiles(File folder, List<File> list) { 
 folder.setReadOnly(); 
 File[] files = folder.listFiles(); 
 for(int j = 0; j < files.length; j++) {

if( "MANI.txt".equals(files[j].getName()))
{

    list.add(files[j]); 
}


if(files[j].isDirectory()) 

getFiles(files[j], list); 
} 
} 
 }

1 个答案:

答案 0 :(得分:4)

我相信你必须使用SwingWorker来实现这一点,你可以像下面那样使用它,

 SwingWorker worker = new SwingWorker()
    {
           @Override
           public object doInBackground() {
               GatheringFiles ob = new GatheringFiles();
               java.util.List list =   ob.returnlist(folder);
               return list;
           }

           @Override
           protected void done() {
               java.util.List list = (java.util.List)get();
               for(int x = 0; x < list.size(); x++)     
        {     
            dtm.addRow(new Object[]{new Boolean(false),list.get(x).toString()});     
        }     
        JPanel pan = new JPanel();
        JScrollPane sp = new JScrollPane(table);     
        TableColumn tc = table.getColumnModel().getColumn(0);     
        tc.setCellEditor(table.getDefaultEditor(Boolean.class));     
        tc.setCellRenderer(table.getDefaultRenderer(Boolean.class));     
        tc.setHeaderRenderer(new CheckBoxHeader(new MyItemListener()));     
        but = new JButton("REMOVE");
        JFrame f = new JFrame();     
        pan.add(sp); 
        but.move(650, 50);
        but.addActionListener(this);
        pan.add(but);

        f.add(pan);
        f.setSize(700, 100);
        f.pack();     
        f.setLocationRelativeTo(null);     
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
        f.setVisible(true);  

        //hide the progress bar
           }
    }

worker.execute();
//show progress bar