Avatar billede milla Nybegynder
26. november 2004 - 12:16 Der er 3 kommentarer

Runtime - eksekvering af exe fil

Jeg forsøger at eksekvere en exe fil fra min java applikation ved at benytte nedestående kommando:

public void cmd() {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try {
                    String line;             
                    Runtime rt = Runtime.getRuntime();
                    Process p = rt.exec("c:\\STK500\\Stk500.exe -dATMEGA128 -ms -re -oetest.hex");
                    BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
                    while ((line = input.readLine()) != null) {
                        System.out.println(line);
                    }
                    input.close();
                } catch (Exception err) {
                    err.printStackTrace();
                }
            }
        });
    }

Filen tager omkring et minut og der bliver løbende udsendt status meldinger, disse status meldinger ville jeg også gerne vise løbende, men hvordan? Pt. "hænger" programmet indtil det er færdig eksekveret og det er jo ikke lige det jeg vil. Kan man overhovedt få "løbende" statusmeldinger?
Avatar billede arne_v Ekspert
26. november 2004 - 22:13 #1
Den run metode bliver kørt i event tråden.

Prøv og lav en seperat tråd.

Eksempel:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class ShowDir extends JFrame implements ActionListener, Runnable {
    private JButton show;
    private JTextField dir;
    private JTextArea dirlist;

    public ShowDir() {
        getContentPane().setLayout(new BorderLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 400);
        dir = new JTextField();
        getContentPane().add(dir, BorderLayout.NORTH);
        dirlist = new JTextArea();
        getContentPane().add(new JScrollPane(dirlist), BorderLayout.CENTER);
        show = new JButton("Vis dir indhold");
        show.addActionListener(this);
        getContentPane().add(show, BorderLayout.SOUTH);
    }

    public void actionPerformed(ActionEvent evt) {
        dirlist.setText("");
        Thread t = new Thread(this);
        t.start();
    }

    public void run() {
        Process p;
        try {
            p = Runtime.getRuntime().exec("CMD /C DIR " + dir.getText() + " /S");
            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line;
            while ((line = br.readLine()) != null) {
                dirlist.setText(dirlist.getText() + line + "\r\n");
            }       
        } catch (IOException e) {
        }
    }

    public static void main(String[] args) {
        ShowDir f = new ShowDir();
        f.setVisible(true);
    }
}
Avatar billede arne_v Ekspert
12. december 2004 - 19:41 #2
OK ?
Avatar billede milla Nybegynder
13. december 2004 - 09:11 #3
Jeg har endnu ikke fået det testet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester