# if statt while nach export Runnable Jar File



## Cangonator (13. Mai 2021)

Hello World,
ich habe folgendes Problem:

Wenn ich mein Projekt im Programm Eclipse exportiere und danach die .jar datei in den Java Decompiler öffne,
wird eine while schleife in eine if abfrage umgewandelt.
Ich habe auch versucht statt der while schleife eine for schleife zu nutzen, selbes Problem

Hier in zeile 12 ist die while schleife
[CODE lang="java" title="Code in Eclipse" highlight="12"]    public static void Start(String sDateiUser, String sDateiProxies, String timetoplay, String sPlaylist) throws InterruptedException {
        ArrayList<String> users = new ArrayList<>();
        ArrayList<String> proxys = new ArrayList<>();
        users = Datei.Lesen(sDateiUser);
        if (sDateiProxies.length() != 0) {
            proxys = Datei.Lesen(sDateiProxies);
        }

        int i = 0;
        int iProxy = 0;

        while(i < users.size()) {
            if ((proxys.size() - 1 >= i && proxys.size() - 1 >= iProxy) || sDateiProxies.length() == 0) {
                try {
                    String sUsername = ((String)users.get(i)).split(":")[0];
                    String sPasswort = ((String)users.get(i)).split(":")[1];
                    String ChromeDriver = Datei.Configuration("ChromeDriver");
                    System.setProperty("webdriver.chrome.driver", ChromeDriver);
                    ChromeOptions options = new ChromeOptions();
                    if (sDateiProxies.length() != 0) {
                        options.addArguments(new String[] { "--proxy-server=http://" + (String)proxys.get(iProxy) });
                    }
                    options.addArguments(new String[] { "--mute-audio" });
                    iProxy++;
                    driver.add(i, new ChromeDriver(options));
                    ((WebDriver)driver.get(i)).manage().window().maximize();
                    ((WebDriver)driver.get(i)).get("http://accounts.spotify.com/de/login?continue=" + sPlaylist);
                    while(!((WebDriver)driver.get(i)).getTitle().equals("Anmelden - Spotify")) {
                        Thread.sleep(5000L);
                        System.out.println("kk");

                        JavascriptExecutor js = (JavascriptExecutor)driver.get(i);
                        js.executeScript("window.scrollBy(0,1000)", new Object[0]);
                        String ElementLoginUsername = Datei.Configuration("ElementLoginUsername");
                        ((WebDriver)driver.get(i)).findElement(By.xpath(ElementLoginUsername)).sendKeys(new CharSequence[] { sUsername });
                        String ElementLoginPassword = Datei.Configuration("ElementLoginPassword");
                        ((WebDriver)driver.get(i)).findElement(By.xpath(ElementLoginPassword)).sendKeys(new CharSequence[] { sPasswort });
                        String ElementLoginButten = Datei.Configuration("ElementLoginButten");
                        ((WebDriver)driver.get(i)).findElement(By.xpath(ElementLoginButten)).click();
//                                    System.out.println("hat sich angemeldet!");
//                                    bricht nach x mal die cookiesuche ab // Nur wenn ohne Proxy dann kommt Cookieabfrage
                        int j = 0;
                        while(j < 3) {
                            try {
//                                    System.out.println("Versuch ElementCookieButton...");
                                Thread.sleep(1000);
                                String ElementCookieButton = Datei.Configuration("ElementCookieButton");
                                ((WebDriver)driver.get(i)).findElement(By.xpath(ElementCookieButton)).click();
//                                    System.out.println("Versuch ElementCookieButton ERFOLGREICH");
                                break;
                            }catch(Exception e) {
                                try {
//                                        System.out.println("catch block - Versuch ElementCookieButton2");
                                    Thread.sleep(1000);
                                    String ElementCookieButton2 = Datei.Configuration("ElementCookieButton2");
                                    ((WebDriver)driver.get(i)).findElement(By.xpath(ElementCookieButton2)).click();
//                                        System.out.println("catch block ende - Versuch ElementCookieButton2 ERFOLGREICH");
                                    break;
                                }catch(Exception e2) {
//                                        System.out.println("ElementCookieButton2 auch Exception, beginne von vorne while");
                                    j++;
                                }
                            }
                        }
                        String p = "";
                        if (sDateiProxies.length() != 0) {
                            p = String.valueOf(String.valueOf((sDateiProxies.length() != 0))) + ": " + (String)proxys.get(iProxy - 1);
                        } else {
                            p = String.valueOf((sDateiProxies.length() != 0));
                        }
                        JTableRow.add(String.valueOf(i), sUsername, p);
                    }

                }catch(Exception e2) {
                    i--;
                }
                i++;
            }
            System.out.println("while wird jetzt gebreaked!");
            break;

        }[/CODE]


Hier in zeile 9 wurde einfach nach dem exportieren eine if abfrage aus der while schleife.
[CODE lang="java" title="Code aus Java Decompiler" highlight="9,"]public static void Start(String sDateiUser, String sDateiProxies, String timetoplay, String sPlaylist) throws InterruptedException {
    ArrayList<String> users = new ArrayList<>();
    ArrayList<String> proxys = new ArrayList<>();
    users = Datei.Lesen(sDateiUser);
    if (sDateiProxies.length() != 0)
      proxys = Datei.Lesen(sDateiProxies);
    int i = 0;
    int iProxy = 0;
    if (i < users.size()) {
      if ((proxys.size() - 1 >= i && proxys.size() - 1 >= iProxy) || sDateiProxies.length() == 0) {
        try {
          String sUsername = ((String)users.get(i)).split(":")[0];
          String sPasswort = ((String)users.get(i)).split(":")[1];
          String ChromeDriver = Datei.Configuration("ChromeDriver");
          System.setProperty("webdriver.chrome.driver", ChromeDriver);
          ChromeOptions options = new ChromeOptions();
          if (sDateiProxies.length() != 0)
            options.addArguments(new String[] { "--proxy-server=http://" + (String)proxys.get(iProxy) });
          options.addArguments(new String[] { "--mute-audio" });
          iProxy++;
          driver.add(i, new ChromeDriver(options));
          ((WebDriver)driver.get(i)).manage().window().maximize();
          ((WebDriver)driver.get(i)).get("http://accounts.spotify.com/de/login?continue=" + sPlaylist);
          while (!((WebDriver)driver.get(i)).getTitle().equals("Anmelden - Spotify")) {
            Thread.sleep(5000L);
            System.out.println("kk");
            JavascriptExecutor js = (JavascriptExecutor)driver.get(i);
            js.executeScript("window.scrollBy(0,1000)", new Object[0]);
            String ElementLoginUsername = Datei.Configuration("ElementLoginUsername");
            ((WebDriver)driver.get(i)).findElement(By.xpath(ElementLoginUsername)).sendKeys(new CharSequence[] { sUsername });
            String ElementLoginPassword = Datei.Configuration("ElementLoginPassword");
            ((WebDriver)driver.get(i)).findElement(By.xpath(ElementLoginPassword)).sendKeys(new CharSequence[] { sPasswort });
            String ElementLoginButten = Datei.Configuration("ElementLoginButten");
            ((WebDriver)driver.get(i)).findElement(By.xpath(ElementLoginButten)).click();
            int j = 0;
            while (j < 3) {
              try {
                Thread.sleep(1000L);
                String ElementCookieButton = Datei.Configuration("ElementCookieButton");
                ((WebDriver)driver.get(i)).findElement(By.xpath(ElementCookieButton)).click();
                break;
              } catch (Exception e) {
                try {
                  Thread.sleep(1000L);
                  String ElementCookieButton2 = Datei.Configuration("ElementCookieButton2");
                  ((WebDriver)driver.get(i)).findElement(By.xpath(ElementCookieButton2)).click();
                  break;
                } catch (Exception e2) {
                  j++;
                }
              }
            }
            String p = "";
            if (sDateiProxies.length() != 0) {
              p = String.valueOf(String.valueOf(String.valueOf((sDateiProxies.length() != 0)))) + ": " + (String)proxys.get(iProxy - 1);
            } else {
              p = String.valueOf((sDateiProxies.length() != 0));
            }
            JTableRow.add(String.valueOf(i), sUsername, p);
          }
        } catch (Exception e2) {
          i--;
        }
        i++;
      }
      System.out.println("while wird jetzt gebreaked!");
    }
    Thread.sleep(1000L);
    int x = 0;
    while (x <= i - 1) {
      try {
        int AktuelleZeit = 0;
        Thread.sleep(500L);
        Play(driver.get(x));
        AktuelleZeit = Integer.valueOf(getPlaytime(driver.get(x)).replace(":", "")).intValue();
        x++;
        break;
      } catch (Exception e2) {
        int AktuelleZeit = 0;
        Thread.sleep(500L);
        try {
          Play2(driver.get(x));
          AktuelleZeit = Integer.valueOf(getPlaytime(driver.get(x)).replace(":", "")).intValue();
          break;
        } catch (Exception exception) {}
      }
    }
    while (true) {
      x = 0;
      while (x <= i - 1) {
        try {
          int AktuelleZeit = Integer.valueOf(getPlaytime(driver.get(x)).replace(":", "")).intValue();
          if (AktuelleZeit >= Integer.valueOf(timetoplay.replace(":", "")).intValue()) {
            Skip(driver.get(x));
            System.out.println("song wurde geskipppt jetzt folgt getsong!");
            JTableRow.plus(x, getSong(driver.get(x)));
            System.out.println("vor der getplaytime while schleife");
            while (Integer.valueOf(getPlaytime(driver.get(x)).replace(":", "")).intValue() > 0)
              Thread.sleep(1000L);
          }
          x++;
        } catch (Exception e) {
          Thread.sleep(1000L);
        }
      }
    }
  }[/CODE]

Kann mir jemand sagen wieso er nach dem export die while schleife in eine if anweisung ändert?
Ich habe dieses Problem nirgends im Internet gefunden.
Ich hoffe jemand kann mir helfen.

Eckdaten:
Ich nutze wie gesagt Eclipse
Version: 2020-12 (4.18.0)
Build id: 20201210-1552
jdk 13.0.2
Windows 10


----------



## fhoffmann (13. Mai 2021)

Cangonator hat gesagt.:


> Datei.Lesen(sDateiUser)


Was gibt denn diese Methode für einen Wert zurück?


----------



## Barista (13. Mai 2021)

Bist Du sicher, dass Dein aktueller Code in der Jar-Datei landet, es gibt offenbar noch mehr Unterschiede?

Folge mal dem Weg der Erzeugung der Jar-Datei, lösche alle temporären Dateien.

Die andere Möglichkeit ist, dass der Decompiler den Bytecode eben anders nach Java-Quellcode zurück übersetzt als der Java-Compiler den Java-Quellcode nach Bytecode übersetzt.

Was willst Du mit dem Decompilieren erreichen?

Ich habe Decompiler nur für Bytecode verwendet, für den ich keinen Java-Quellcode hatte.


----------



## httpdigest (13. Mai 2021)

Cangonator hat gesagt.:


> Kann mir jemand sagen wieso er nach dem export die while schleife in eine if anweisung ändert?


Weil die while Schleife sowieso nur eine einzige Iteration durchlaeuft. Am Ende hast du dort als letzte Anweisung ein break. Somit ist deine while Schleife effektiv dasselbe wie ein if, und es ist kein Bug im Decompiler.


----------



## Cangonator (13. Mai 2021)

fhoffmann hat gesagt.:


> Was gibt denn diese Methode für einen Wert zurück?


Die Methode gibt einen ArrayList<String> zurück

[CODE lang="java" title="Methode" highlight="30,"]public class Datei
{
public static ArrayList<String> Lesen(String sDateiname) {
  ArrayList<String> DateiInhalt = new ArrayList<String>();

  BufferedReader reader = null;
  try {
    reader = new BufferedReader(new FileReader(sDateiname));
  } catch (FileNotFoundException e) {

    e.printStackTrace();
  }


  String zeile = null;

  try {
    while ((zeile = reader.readLine()) != null)
    {
      DateiInhalt.add(zeile);

    }

  }
  catch (IOException e) {

    e.printStackTrace();
  }

  return DateiInhalt;
}[/CODE]


----------



## Cangonator (13. Mai 2021)

httpdigest hat gesagt.:


> Weil die while Schleife sowieso nur eine einzige Iteration durchlaeuft. Am Ende hast du dort als letzte Anweisung ein break. Somit ist deine while Schleife effektiv dasselbe wie ein if, und es ist kein Bug im Decompiler.


du hast alles zerstört, danke dir 
Du hast natürlich recht, das war die Lösung!
Und selbstverständlich danke für alle anderen schnellen Antworten.
Wenn der code wieder läuft, melde ich mich nochmal


----------



## Cangonator (14. Mai 2021)

Wie gesagt Problem ist gelöst. Thema kann geschlossen werden.
Danke nochmal an alle 👍


----------

