2016-10-11 10 views
0

私はこの小さなスクリプトをping google.ptに作成し、pingの結果を使って何かを行います。問題は、スクリプトをしばらく実行すると、より多くのRAMが使用されるということです。メモリリークを修正するにはどうしたらいいですか?

私は間違いを見つけることができないようです、あなたは私を助けることができますか?

public static void main(String[] args) { 
    String ip = "google.pt -t -4"; 
    int pingRetrieved = 0; 

    //window that displays the ping 
    s = new Square(); 


    String pingCmd = "ping " + ip; 
    try { 


     Runtime r = Runtime.getRuntime(); 

     Process p = r.exec(pingCmd); 

     BufferedReader in = new BufferedReader(new 
     InputStreamReader(p.getInputStream())); 
     String inputLine; 
     while ((inputLine = in.readLine()) != null) { 
      //System.out.println(inputLine); 
      pingRetrieved = getPingValueFromPingResult(inputLine); 
      takeActionFromPingValue(pingRetrieved); 
     } 
     in.close(); 

    } catch (IOException e) { 
     System.out.println(e); 
    } 


} 

はEDIT:getPingValue方法:

private static int getPingValueFromPingResult(String inputLine) { 
    String[] splitString; 
    String timeParameter; 
    if (inputLine.contains("Reply")) { 
     splitString = inputLine.split(" "); 
     timeParameter = splitString[4]; 
     timeParameter = (timeParameter.split("="))[1]; 
     timeParameter = timeParameter.replace("ms", ""); 
     return Integer.parseInt(timeParameter); 
    } 
    return 0; 
} 

とactionFromPingValueMethodはちょうど私が作成したJFrameの上にこれを呼び出して取る:

public void printNumber(int ping){ 

    this.getContentPane().removeAll(); 
    JLabel jl = new JLabel(); 
    Font f; 
    if(ping == 0){ 
     this.setLocation((int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth()-200), 0); 
     jl = new JLabel("Connection Error"); 
     f = new Font("Fixedsys", Font.PLAIN, 25); 
    }else{ 
     this.setLocation((int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth()-100), 0); 
     jl = new JLabel(ping+"ms"); 
     f = new Font("Fixedsys", Font.PLAIN, 25); 
    } 
    jl.setFont(f); 
    jl.setForeground(Color.MAGENTA); 
    this.getContentPane().add(jl, java.awt.BorderLayout.NORTH); 
    this.pack(); 

} 
+0

「takeActionFromPingValue」には何が含まれていますか? – Enzokie

+0

他のメソッドは 'getPingValueFromPingResult'と' takeActionFromPingValue'をどうしますか? –

+0

ここに投稿されたコードの部分には明らかな問題はありません。それは欠けている方法の可能性が高いです。 – f1sh

答えて

0

pingコマンドが正常に永遠に実行され、そのため、あなた条件

while ((inputLine = in.readLine()) != null) 

は、タイムアウト(-tで指定)がトリガーされたときにのみ偽になります。 -c countパラメータを使用して、ping要求の数を制限する必要があります。

関連する問題