简体   繁体   中英

JFrame, trying to make button run another class

Pretty much what I'm trying to do is make a custom installer, I have buttons and that working fine but I want to run another class called CopyDir.java when I click on the button so that it copies the necessary files to the correct directory. Problem is, is that I'm a bit stumped on how to do this.

public class Frame extends JFrame implements ActionListener {
JPanel pane = new JPanel();
JButton PC = new JButton("Install Mod (PC)");
JButton Steam = new JButton("Install Mod (Steam)");
JLabel Text = new JLabel("Welcome to the BTD 5 Mod Installer");
JLabel Text2 = new JLabel("Click on the button that matches your version of BTD 5");
JLabel Text3 = new JLabel("To install it for the version that you are using");
JLabel Text4 = new JLabel("© Nixxx60/Nanikos");
Frame() {
    super("BTD 5 Mod Installer");
    setBounds(100, 100, 400, 150);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container con = this.getContentPane();
    con.add(pane);
    PC.setMnemonic('P');
    PC.addActionListener(this);
    pane.add(PC);
    PC.requestFocus();
    con.add(pane);
    Steam.setMnemonic('P');
    Steam.addActionListener(this);
    pane.add(Steam);
    Steam.requestFocus();
    setVisible(true);
    pane.add(Text);
    pane.add(Text2);
    pane.add(Text3);
    pane.add(Text4);
}

public void actionPerformed(ActionEvent event) {
    Object source = event.getSource();
    if (source == PC) {
        JOptionPane.showMessageDialog(null, "Mod has been installed on PC/Cracked Edition!", "BTD 5 Installer",
            JOptionPane.PLAIN_MESSAGE);
        setVisible(true);
    }
    if (source == Steam) {
        JOptionPane.showMessageDialog(null, "Mod has been installed for Steam Edition!", "BTD 5 Installer",
            JOptionPane.PLAIN_MESSAGE);
        setVisible(true);
    }
}
public static void main(String args[]) {
    new Frame();
}
}

Also, here is the code for the "CopyDir.java" Class.

package Nanikos.BTD5.Main;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class CopyDir {

    public static void main(String args[]) throws Exception
    {
        copyFiles(new File("C:\\Users\\User\\Desktop\\BTD5 Mod Installer\\Mod Files\\PC Assets"),new File("C:\\Program Files (x86)\\Steam\\steamapps\\common\\BloonsTD5"));
        System.out.println("Files Copied");
    }

    public static void copyFiles(File src,File des) throws Exception
    {
        if(src.isDirectory())
        {
            if(!des.exists()) des.mkdir();
            String [] filePaths=src.list();
            for(String filePath: filePaths)
            {
                File srcFile =new File(src, filePath);
                File desFile =new File(des, filePath);
                copyFiles(srcFile,desFile);
            }
        }
        else
        {
            FileInputStream from =null;
            FileOutputStream to =null;

            from = new FileInputStream(src);
            to = new FileOutputStream(des);
            byte [] buffer=new byte[4096];
            int byteReads;

            while( (byteReads=from.read(buffer))!=-1 )
            {
                to.write(buffer,0,byteReads);
            }

            from.close();
            to.close();
        }
    }
}

What you want is to launch your class as a Thread

To launch your class CopyDir as a thread, make it implement Thread , change your main method signature to this :

public void run() {
  //Your code
}

Also, to pass parameters to your thread, add a constructor in your CopyDir class that takes the parameters you have and stores them as attributes, to be able to get it from your method.

Then, to launch the thread from your event listeners :

 CopyDir myCopyThread = new CopyDir(inputPath,outputPath);
 myCopyThread.start();

This code will create a thread that starts running CopyDir in the run() method

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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