简体   繁体   English

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

[英]how to execute two thread simultaneously in java swing?

My aim is to select all the files named with MANI.txt which is present in their respective folders and then load path of the MANI.txt files different location in table. 我的目的是选择所有以MANI.txt命名的文件,这些文件存在于各自的文件夹中,然后加载MANI.txt文件中不同位置的路径。 After I load the path in the table,I used to select needed path and modifiying those. 在我加载表中的路径后,我习惯选择所需的路径并修改它们。
To load the MANI.txt files taking more time,because it may present more than 30 times in my workspace or etc. until load the files I want to give alarm to the user with help of ProgessBar .Once the list size has been populated I need to disable ProgressBar . 要加载MANI.txt文件花费更多时间,因为它可能在我的工作空间等中出现超过30次,直到加载文件我想在ProgessBar帮助下向用户发出警报。 ProgessBar填充了列表大小我需要禁用ProgressBar

Could anyone please help me out on this? 有人可以帮我解决这个问题吗?

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

Here I need progress bar 在这里,我需要进度条

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

I believe you have to use a SwingWorker to achieve this, you could use it like follows, 我相信你必须使用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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM