# Java, rar.exe(winrar cmd version) und cpu-auslastung 100%



## PELLE (5. Jun 2006)

Hallo,

ob ich aus dem Java-editor oder die erstellte .jar datei aufrufen spielt keine Rolle, das Ergebnis ist dasselbe!

Ich drücke den Button in meinem Java Komprimierungsprogramm und die Kommmandozeilenversion von winrar gennant rar.exe wird mit bestimmten Parametern aufgerufen. Heute morgen hat noch alles fkt., doch jetzt spinnt entweder die rar.exe oder mein java/Java-editor???

ich packe z.b. eine 40 mb datei in 5mb stücke. Die 1. 5MB Datei packt er schnell, aber immer die 2. 5 MB Datei steckt minutenlang bei 2352 KB/1 KB fest. Währenddessen schaue ich in den task manager und sehe der JEditor hat 99 % cpu auslastung und die rar.exe 0 % sprich die schläft also? WArum das? Wenn ich jetzt den Javaeditor aus dem speicher kicke bekommt schlagartig die rar.exe wird ca. 90 % cpu power und fängt sofort an weiterzupacken???

Warum ist das so?




```
public void actionPerformed(ActionEvent e)
{
         if(e.getSource().equals(buttonSend))
         {

             try
             {
               Runtime.getRuntime().exec("rar.exe a -r -m5 -vn -v5000k -y bla source");
             }// bla ist der datei.rar-name und source = zu packendes DIR

             catch(IOException a)
             {
               a.printStackTrace();
             }

         }
}
```



weiß net ob das viel mit java zu tun hat ^^ , aber ich finde kein rar forum auf english bzw. deutsch.

Sonst fragt einfach wenn ihr fragen habt!


----------



## Leroy42 (6. Jun 2006)

Muß es denn unbedingt das RAR-Format sein?

Ich benutze sein Anfang des Jahres 7Zip.

Es packt stärker als das CAB-Format, ist schneller, frei (GNU-Lizenz), läßt sich ideal ins
WinDoof-Kontextmenü einfügen, packt reine Textdateien im PPMd-Verfahren sogar 
extrem schnell und stark und besitzt eine Java-API.

BTW: Weiß einer, wie ich den Aufruf der Command-Shell im Kontextmenü einbauen
kann um die Shell direkt im ausgwählten Ordner zu öffnen?

 Auf dem _Arbeits_rechner habe ich es installiert, nur nicht zuhause   

Und ich weiß auch nicht mehr wonach ich da googlen soll.


----------



## PELLE (6. Jun 2006)

7zip habe ich ein paar monate benutzt bis ich schnauze voll hatte 

7zip ist langsamer als winrar, verbraucht massing mehr Ram und packt dafür nur 5 % besser ^^


----------



## Leroy42 (6. Jun 2006)

Alte Version? Packrate von normal >> maximum >> ultra eingestellt?

Aber egal, mir (ein paar Kollegen und ich) san's zufrieden und gut ist.

Wir müssen hier ja kurz vorm Feierabend einen Flame entfachen.


----------



## PELLE (6. Jun 2006)

wie gesagt ich habe damit monatelang cds/dvds gepackt und bin zu winrar zurückgekehrt und ja habe immer die neueste 7zip benutzt auf super ultra usw.kompression. habe 1 gig speicher und 700 davon dem 7zip indirekt zugewiesen so dass ich noch etwas die größe des archivs drücken konnte. Wie gesagt ich weiß wie das tool effizient benutzt wird, dennoch winrar ist schneller und verbraucht weniger ram. pack mal den DVD mit 7zip und warte 2 stunden und länger, aber jedem das seine;-)

Um zum Thema zurückzukommen...siehe unten:


----------



## PELLE (6. Jun 2006)

```
public class packenThread extends Thread
{
         private String filesizeOld = filesizeCombo.getSelectedItem().toString();
         private String filesizeNew = filesizeOld.substring(0,filesizeOld.length() - 3).trim();

         String filenameNew = rlsFilenameTF.getText().trim();
         String sourceDir = "L:/sachen/source";

         packenThread meinThread = new packenThread();

         packenThread()
         {
              new Thread( this ).start();
         }

         public void run()
         {
               Runtime.getRuntime().exec("rar a -r -m5 -vn -y -v"+filesizeNew+"k "+filenameNew+" "+sourceDir);

         }
}
```


```
public void actionPerformed(ActionEvent e)
{

         if(e.getSource().equals(buttonSend))
         {

             try
             {
               meinThread.start();

               // a = add files // -r =recurse subdirectories // -m5 = best compression // -o+ = replace existing files
               // -vn = old style part rar names // -v5000k = 5000 kb/each file // -y = say yes to all queries
               // source = source verzeichnis wo daten drin sind

             }
               catch(IOException a)

             {
               a.printStackTrace();
             }

       }


}
```


Fehlermeldung:


```
mainWindow.java:550: cannot find symbol
symbol  : variable meinThread
location: class mainWindow.ReleasePanel
               meinThread.start();
               ^
1 error
```

in dem Thread führe ich jetzt das rar.exe app aus, nur bekomme ich noch ne Fehlermeldung, kann mir da jemand weiterhelfen, was ich falsch machen?


----------



## Murray (7. Jun 2006)

Nimm die Variablendeklaration

```
packenThread meinThread
```
aus der der Klasen packenThread raus und pack sie in die Fensterklasse mainWindow, dann ist sie im actionPerformed sichtbar.
Dann musst Du Dir noch überlegen, ob Du den Thread direkt im Konstruktor oder erst später starten willst; im Moment rufst Du start zweimal auf. 

OT: normalerweise schreibt man Klassennamen groß.


----------



## thE_29 (7. Jun 2006)

Warum stellst du die Kompression auf Super Ultra bei dem 7zip?!?

Stells auf normal oder so, das es das gleiche Ergebnis liefert wie winrar...

Welche CPU hastn du und welche hat Leoroy?


----------



## Leroy42 (7. Jun 2006)

thE_29 hat gesagt.:
			
		

> Warum stellst du die Kompression auf Super Ultra bei dem 7zip?!?
> Stells auf normal oder so, das es das gleiche Ergebnis liefert wie winrar...


Das habe ich ja gemeint.


			
				Leroy42 hat gesagt.:
			
		

> Packrate von normal >> maximum >> ultra eingestellt?





			
				thE_29 hat gesagt.:
			
		

> Welche CPU hastn du und welche hat Leoroy?


Auf Arbeit: Pentium 4 3 GHz, 512 MB RAM
Zu Hause: Kein Schimmer  :shock: 

Und durch Rumdrehen an der Wörterbuch- und Wortgröße in 7Zip kannst du
7Zip leicht dazu bringen 1 GByte RAM zu  anzufordern.

Es bringt aber praktisch kaum Verbesserungen der Packrate; darum reichen
die Grundeinstellungen allemal


----------



## PELLE (7. Jun 2006)

> Nimm die Variablendeklaration
> packenThread meinThread aus der der Klasen packenThread raus und pack sie in die Fensterklasse mainWindow, dann ist sie im actionPerformed sichtbar.



die variablendeklaration ist doch aber in einer public class und die methode actionPerfomed ist auch public auf gleicher ebene, warum wird meinThread dann nicht sichtbar für die actionPerformed-Methode??



> Dann musst Du Dir noch überlegen, ob Du den Thread direkt im Konstruktor oder erst später starten willst; im Moment rufst Du start zweimal auf.



ok hier sind meine Veränderungen:

In der Fensterklasse mainWindow.java befindet sich dieser code:


```
private PackThread meinThread;
```

Weiter unten eine neue class:



```
public class PackThread extends Thread
{
         private String filesizeOld = filesizeCombo.getSelectedItem().toString();
         private String filesizeNew = filesizeOld.substring(0,filesizeOld.length() - 3).trim();

         String filenameNew = rlsFilenameTF.getText().trim();
         String sourceDir = "L:/sachen/source";

         PackThread()
         {

         }

         public void run()
         {
            Runtime.getRuntime().exec("rar a -r -m5 -vn -y -v"+filesizeNew+"k "+filenameNew+" "+sourceDir);
         }
      }


public void actionPerformed(ActionEvent e)
{

         if(e.getSource().equals(buttonSend))
         {

             try
             {
               meinThread = new PackThread();
               meinThread.start();
               
               // a = add files // -r =recurse subdirectories // -m5 = best compression // -o+ = replace existing files
               // -vn = old style part rar names // -v5000k = 5000 kb/each file // -y = say yes to all queries
               // source = source verzeichnis wo daten drin sind

             }
             catch(IOException a)
             {

               a.printStackTrace();

             }

        }         

}
```




> OT: normalerweise schreibt man Klassennamen groß.



Hast völlig recht, habe ich geändert!!!


die Fehlermeldung bekomme ich jetzt:


```
mainWindow.java:21: cannot find symbol
symbol  : class PackThread
location: class mainWindow
    private PackThread meinThread;
            ^
1 error
```


----------



## Murray (7. Jun 2006)

Ist PackThread in der Datei mainWindow.java definiert? Dann lass da das _public_ weg.


----------



## PELLE (7. Jun 2006)

ja natürlich PackThread ist eine public class von mainWindow.java class der hauptklasse sozusagen!

ich habe jetzt das wort public vor:

Dieses hier -->
	
	
	
	





```
class PackThread extends Thread
      {
         private String filesizeOld = filesizeCombo.getSelectedItem().toString();
         private String filesizeNew = filesizeOld.substring(0,filesizeOld.length() - 3).trim();

         String filenameNew = rlsFilenameTF.getText().trim();
         String sourceDir = "L:/UNRELEASED/source";

         PackThread()
         {

         }

         public void run()
         {
            Runtime.getRuntime().exec("rar a -r -m5 -vn -y -v"+filesizeNew+"k "+filenameNew+" "+sourceDir);
         }
}
```
 gelöscht, aber diesselbe Fehlermeldung!!1


----------



## Murray (7. Jun 2006)

Hmm, möglicherweise ist da etwas mit der Schachtelung der Klassen innerhalb der Quelldatei nicht in Ordnung; normalerweise sollte sich schon die innere Klasse PackThread so nicht übersetzen lassen, weil die von Runtime#exec deklarierte IOException weder abgefangen noch deklariert wird.
Kannst Du die ganze Datei posten, oder ist die zu groß oder zu geheim?


----------



## PELLE (7. Jun 2006)

ich poste dir später ne modifizierte version die ich schon öfters rausggeben habe bzw. für solche zwecke ist. Das andere ist 995 zeilen...


----------



## PELLE (7. Jun 2006)

Ok hier ist die stark modifizierte version ^^

ich habe ne frei erhältliche (demo) software .exe von 44 mb beigefügt und in den "source" ordner gelegt, der auch als quellverzeichnis als parameter bei rar.exe und dessen aufruf angegeben ist!!! also schön im ordner lassen;-)


http://rapidshare.de/files/22479157/RAR_Packer_Public_Version.rar.html

Das ist der code aus der mainWindow.class:


```
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.WindowConstants;
import javax.swing.filechooser.FileFilter;
import javax.swing.ButtonGroup.*;
import java.io.*;
import java.text.*;
import java.util.Date;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
import javax.swing.border.Border;
import javax.swing.filechooser.*;
import java.util.*;
import java.util.StringTokenizer;
import java.util.Arrays;
import javax.swing.border.*;
public class mainWindow extends JFrame
{

    //private PackThread meinThread;

    public mainWindow()
    {

      super("Winrar clone :P");
      UIManager.put("swing.boldMetal", Boolean.FALSE);
      JTabbedPane jtp = new JTabbedPane();

      PackPanel RP = new PackPanel();

      jtp.addTab("<html><font size=5>Packen</font size></html>", RP);
      add(jtp);
    }

   class PackPanel extends JPanel implements ActionListener
   {
      JLabel Filename        = new JLabel("<html>[b]Filename[/b]</html>");
      JLabel filesize           = new JLabel("<html>[b]Filesize[/b]</html>");
      JTextField FilenameTF  = new JTextField();
      JComboBox filesizeCombo   = new JComboBox();

      JButton buttonSend = new JButton("<html>Pack Files
</html>");

      String name, verzeichnisName;

      public PackPanel()
      {
          setLayout(null);
          add(Filename);
          add(FilenameTF);
          add(filesize);
          add(filesizeCombo);
          add(buttonSend);
          Filename.setBounds(600,0,120,25);
          FilenameTF.setBounds(685,0,160,25);
          filesize.setBounds(600,31,150,25);
          filesizeCombo.setBounds(685,31,159,25);

          buttonSend.setBounds(845,0,144,64);
          buttonSend.setForeground(Color.blue);

          Filename.setForeground(new Color(40,120,40));
          FilenameTF.setForeground(Color.blue);
          filesize.setForeground(new Color(40,120,40));
          filesizeCombo.setForeground(Color.blue);
          filesizeCombo.addItem("5000 KB");

          buttonSend.addActionListener(this);

      }  //.. KONSTRUKTOR ENDE .. //


      public class PackThread extends Thread
      {
         private String filesizeOld = filesizeCombo.getSelectedItem().toString();
         private String filesizeNew = filesizeOld.substring(0,filesizeOld.length() - 3).trim();

         String filenameNew = FilenameTF.getText().trim();
         

         PackThread()
         {

         }

         public void run()
         {
            Runtime.getRuntime().exec("rar a -r -m5 -vn -y -v"+filesizeNew+"k "+filenameNew+" source");
         }
      }


      public void actionPerformed(ActionEvent e)
      {

         if(e.getSource().equals(buttonSend))
         {
             try
             {
               meinThread = new PackThread();
               meinThread.start();

               // a = add files // -r =recurse subdirectories // -m5 = best compression // -o+ = replace existing files
               // -vn = old style part rar names // -v5000k = 5000 kb/each file // -y = say yes to all queries
               // source = source verzeichnis wo daten drin sind

             }
             catch(Exception a)
             {

               a.printStackTrace();

             }
         }
      }
   }

   public static void main(String args[])
   {
      mainWindow Fenster = new mainWindow();
      Fenster.setSize(1000,675);
      Fenster.setLocationRelativeTo(null);
      Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      Fenster.setResizable(false);
      Fenster.setVisible(true);
   }
}
```


----------



## Murray (8. Jun 2006)

Wie vermutet: die Schachtelung stimmt nicht: Du hast PackThread als "inner class" von PackPanel definiert. Wenn Du das so machst, dann muss die Variable meinThread auch ein Member von PackPanel sein.

Also entweder:

```
public class mainWindow { //OT: sollte besser MainWindow heissen
  class PackPanel {
    class PackThread {
    }
 
    private PackThread meinThread;
  }
}
```

oder


```
public class mainWindow { //OT: sollte besser MainWindow heissen
  class PackPanel {
  }
  class PackThread {
  }
 
  private PackThread meinThread;
}
```


----------



## PELLE (8. Jun 2006)

Ok ich habe es so geändert:

Der Javaeditor compiliert richtig, aber dennoch besteht das vorheringe Problem, dass ich bei 50 MB gesplittet in 10 dateien nur die 1 datei mit 5 mb schnell bzw. normal gepackt wird. Die 2. .rar datei bleibt auf 1 kb stehen bis ich die compilierte und ausgeführte .class datei beende.


```
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.WindowConstants;
import javax.swing.filechooser.FileFilter;
import javax.swing.ButtonGroup.*;
import java.io.*;
import java.text.*;
import java.util.Date;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
import javax.swing.border.Border;
import javax.swing.filechooser.*;
import java.util.*;
import java.util.StringTokenizer;
import java.util.Arrays;
import javax.swing.border.*;
public class mainWindow extends JFrame
{
    public mainWindow()
    {

      super("Winrar clone :P");
      UIManager.put("swing.boldMetal", Boolean.FALSE);
      JTabbedPane jtp = new JTabbedPane();

      PackPanel RP = new PackPanel();

      jtp.addTab("<html><font size=5>Packen</font size></html>", RP);
      add(jtp);
    }

   class PackPanel extends JPanel implements ActionListener
   {
      JLabel Filename        = new JLabel("<html>[b]Filename[/b]</html>");
      JLabel filesize        = new JLabel("<html>[b]Filesize[/b]</html>");
      JTextField FilenameTF  = new JTextField();
      JComboBox filesizeCombo= new JComboBox();

      JButton buttonSend = new JButton("<html>Pack Files
</html>");
      private PackThread meinThread;

      public PackPanel()
      {
          setLayout(null);
          add(Filename);
          add(FilenameTF);
          add(filesize);
          add(filesizeCombo);
          add(buttonSend);
          Filename.setBounds(600,0,120,25);
          FilenameTF.setBounds(685,0,160,25);
          filesize.setBounds(600,31,150,25);
          filesizeCombo.setBounds(685,31,159,25);

          buttonSend.setBounds(845,0,144,64);
          buttonSend.setForeground(Color.blue);

          Filename.setForeground(new Color(40,120,40));
          FilenameTF.setForeground(Color.blue);
          filesize.setForeground(new Color(40,120,40));
          filesizeCombo.setForeground(Color.blue);
          filesizeCombo.addItem("5000 KB");

          buttonSend.addActionListener(this);

      }  //.. KONSTRUKTOR ENDE .. //


      public class PackThread extends Thread
      {
         private String filesizeOld = filesizeCombo.getSelectedItem().toString();
         private String filesizeNew = filesizeOld.substring(0,filesizeOld.length() - 3).trim();

         String filenameNew = FilenameTF.getText().trim();
         String sourceDir = "source";

         PackThread()
         {

         }

         public void run()
         {

            try
             {
                Runtime.getRuntime().exec("rar a -r -m5 -vn -y -v"+filesizeNew+"k "+filenameNew+" source");

               // a = add files // -r =recurse subdirectories // -m5 = best compression // -o+ = replace existing files
               // -vn = old style part rar names // -v5000k = 5000 kb/each file // -y = say yes to all queries
               // source = source verzeichnis wo daten drin sind

             }
             catch(Exception a)
             {
               a.printStackTrace();
             }
         }
      }

      public void actionPerformed(ActionEvent e)
      {

         if(e.getSource().equals(buttonSend))
         {
             try
             {
               meinThread = new PackThread();
               meinThread.start();

               // a = add files // -r =recurse subdirectories // -m5 = best compression // -o+ = replace existing files
               // -vn = old style part rar names // -v5000k = 5000 kb/each file // -y = say yes to all queries
               // source = source verzeichnis wo daten drin sind
             }
             catch(Exception a)
             {

               a.printStackTrace();

             }
         }
      }
   }

   public static void main(String args[])
   {
      mainWindow Fenster = new mainWindow();
      Fenster.setSize(1000,675);
      Fenster.setLocationRelativeTo(null);
      Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      Fenster.setResizable(false);
      Fenster.setVisible(true);
   }
}
```


----------



## thE_29 (8. Jun 2006)

Also ich würde den Befehl in eine bat Datei schreiben und dann die bat Datei ausführen!

Habe ich für die Firma so erprobt und ist imho, das sicherste, da wie auch bei dir manche Befehle bei der Hälfte nima weitergemacht haben oder zeitweise gar net aufgerufen wurden.. etc

Habs dann so gelöst!

Bat Datei mit Befehl und dann exec(batdatei.bat)


----------



## PELLE (8. Jun 2006)

ähm ich vestehe den vorteil nicht ganz von deinem Vorschlag???!!!

das Problem ist ja, dass java/rar.exe ein problem mit der Zeitscheibenaufteilung ^^ hat bzw. die cpu prioritäten nicht richtig verwaltet...

warum sollte es gehen wenn ich die getRuntime Methode in ne .bat auslagere??? Hast dus probiert mit meinem beispiel und geht es?

ich habe so geändert:


```
public void run()
         {

            try
             {
                Runtime.getRuntime().exec(bla.bat);

               // a = add files // -r =recurse subdirectories // -m5 = best compression // -o+ = replace existing files
               // -vn = old style part rar names // -v5000k = 5000 kb/each file // -y = say yes to all queries
               // source = source verzeichnis wo daten drin sind

             }
             catch(Exception a)
             {
               a.printStackTrace();
             }
         }
      }
```


bla.bat inhalt:

rar.exe a -r -m5 -vn -y -v"+filesizeNew+"k "+filenameNew+" source




1. Wenn ich nur die bla.bat aufrufe ist ja klar, das die rar.exe ausgeführt wird, doch das bringt mir nix, schlielich soll die eingabe der datei part größe bzw. namen usw. ja über die java gui geschehen und das fkt. ja auch, nur eben wird nur das 1. file gepackt, beim 2. file wird bei 1 kb gestoppt !!!!! sprich dein vorschlag bringt mich net weiter...


----------



## thE_29 (8. Jun 2006)

Du musst dir die bat Datei erst in realtime erstellen 

Und glaub mir ich hab das mit vielen anderen Methoden gemacht..

Weil das exec hundst in Linux genausorum wie in Windows!

Hab mir dann ne lib Methode geschrieben, die entweder ne bat Datei (im tmp Verzeichnis) oder ne .sh Datei erstellt und mir den Namen zurückgibt!

Der Methode übergebe ich den Befehl => BufferedWriter schreibt die Zeile rein, wenn Linux setzt noch chmod +x  und dann wird diese Datei ausgeführt...

ggf, musst du bei dem rar.exe den kompletten Pfad angeben, da die bat Datei ja im tmp verzeichnis liegt

ajo und der letzte Befehl in der bat datei ist in windows

del name.bat
und in linux
rm name.bat

Meistens löscht sich diese bat datei dann auch (in seltenen Fällen bleibts bestehen)

Aber da es ja im temp Ordner ist, kann man das sowieso löschen (File.createTempFile(...))


Edit: Komisch, wenn das auch net hinhaut...

Führe die bat Datei von Hand aus oder starte es via Start ausführen..

Hängt er dann auch?


----------



## PELLE (8. Jun 2006)

also die tips die du jetzt genannt hast muss ich erst ausprobieren und deine letzte Frage, nein er hängt nicht wenn ich die .bat von hand öffne.


----------



## Guest (10. Jun 2006)

thE_29 hat gesagt.:
			
		

> Du musst dir die bat Datei erst in realtime erstellen
> 
> Und glaub mir ich hab das mit vielen anderen Methoden gemacht..
> 
> ...



1. was ist ne lib Methode?
2. warum ne .sh Datei für was?
3. ...schreibe die zeile rein...: Du meinst die exec...Zeile mit den Parametern?
4. warum liegt die bat Datei im tmp verzeichnis und in welchem tmp verzeichnis vor alllem?
5. warum name.bat? ist die name.bat die datei die ich erstelle? und warum lösche ich diese wieder nachdem die rar.exe ausgeführt wurde?
6. ....den kompletten Pfad er rar.exe angeben... : also so?:

Runtime.getRuntime().exec(name.bat);
Inhalt der name.bat: L:/MeinJavaProgramm/rar.exe a -r -m5 -vn -y -v"+filesizeNew+"k "+filenameNew+" "+sourceDir);
del name.bat

dann würde die rar.exe aber nicht auf anderen pc`s laufen, da die evt. kein L-Laufwerk haben...
7. da gibts noch ein weiteres problem... und zwar wenn ich als user des Programms eingaben mache wie filename und partsize z.B. 10000 kb über ein textfield und das ganze wird in die variablen filesizeNew und filenameNew siehe oben eingelesen, dann findet rar.exe bei der ausführung der name.bat keine werte ich diesen String sondern nimmt filesizeNew als Größe was ja nicht geht und +filenameNew+ bewertet er als Dateinamen für die .rar Datei was ja auch nicht sein darf. Wie löse ich das Problem?

Wie mich freuen, wenn du mir helfen könntest, da deine Ansätze schon mal ok zu sein scheinen, wenn auch etwas verwirrt wiedergegeben :wink:


----------



## Granjow (10. Jun 2006)

<tip>
http://tugzip.com/
</tip>


----------



## Guest (11. Jun 2006)

Create 7-ZIP, BH, BZ2, CAB, JAR, LHA (LZH), SQX, TAR, TGZ, YZ1 and ZIP archives.

ich will .rar archieve erzeugen sprich dein tugzip hilft mir nicht weiter, dennoch danke!


----------



## thE_29 (12. Jun 2006)

1. Das ist ne Library Methode (sprich man kann sie halt in meinem programm überall nutzen)

2. sh Datei ist für Linux! Rennt dein Programm unter Linux? 

3. Jo genau, die Zeile die du ausführen wolltest, schreibst in die Datei

4. die liegt im standard Benutzer tmp verzeichnis File.createTmpFile!

5. nicht name.bat sondern einen eindeutigen Namen, zb System.currentTimeMillis().bat 

6. Jo, den kompletten Pfad, aber du musst überall zuerst die rar Exe raussuchen (wie du den aktuellen pfad bekommst kannst du im Forum ersuchen)

7. Die Bat Datei wird für jedes Ausführen NEU erstellt, daher soll man die alte löschen und deswegen liegt sie im tmp Verzeichnis!


----------



## Gast (12. Jun 2006)

ok bullz irc tips und deine probier ich am freitag aus, vorher keine zeit, dann schreibe ich wieder hier;-)


----------



## PELLE (17. Jun 2006)

ok das habe ich nun geändert auf the29 und bullz Ratschlag hin, dennoch packt er nur eine rar datei und nicht die restlichen siehe cpu auslastung problem etc...:

das reine ausführen der rar.bat datei packt ohne probleme , nur in java aufgerufen macht probleme???


```
public class PackThread extends Thread
      {
         private String programmparameter = "rar.exe a -r -m5 -vn -y -v" ;
         private String filesizeOld = filesizeCombo.getSelectedItem().toString();
         private String filesizeNew = filesizeOld.substring(0,filesizeOld.length() - 3).trim();
         String filenameNew = rlsFilenameTF.getText().trim();
         //String source = sourceDirectoryText.getText().trim();
         String sourceDir = "L:/source";

         PackThread()
         {

         }

         public void run()
         {

             try
             {
               String newString = programmparameter + filesizeNew + "k " + filenameNew + " " + sourceDir;
               BufferedWriter bw = new BufferedWriter(new FileWriter("rar.bat"));
               bw.write(newString);
               bw.close();
               Runtime.getRuntime().exec("rar.bat");
               //tmp.delete();
               // a = add files // -r =recurse subdirectories // -m5 = best compression // -o+ = replace existing files
               // -vn = old style part rar names // -v5000k = 5000 kb/each file // -y = say yes to all queries
               // source = source verzeichnis wo daten drin sind
             }
             catch(Exception a)
             {




                  a.printStackTrace();
             }
         }
      }
```


----------



## PELLE (17. Jun 2006)

das ist echt komisch die Lösung bzw. ist keine echt Lösung...


Nachdem die einzelnen rar archive nicht mehr gepackt werden (nur das 1. rar archiv)  wechsele ich den tabreiter "settings" , drücke einen button und öffne damit einen filedialog. In dem Moment bekommt der rar.exe plötzlich wieder priorität und packt zuende???? 

Wie kann das sein???


----------

