2015-11-06 31 views
1

我試過在很多地方搜索這個可能發生的原因,但我不能爲我的生活弄清楚它。有調用System.out.printf(...);當main被執行時,它們只是從終端丟失。另一個奇怪的是,它每次都不一樣。我可以連續運行應用程序兩次,無需更改代碼或重新構建,並且輸出缺少不同的System.out調用。Heroku本地應用程序測試在控制檯中缺少System.out

這是一個Maven Build。我有三個對象。包含main,一個User對象和一個DB訪問對象的類。

主要目標是使用連接來建立和發送電子郵件。 Db對象正在使用連接來訪問psql本地數據庫。

下面是一些顯示問題的代碼片段。

public static List<User_Search_Profile> getAllTable(String tableName, PrintStream out){ 
    List<User_Search_Profile> users = new ArrayList<User_Search_Profile>(); 
    Connection connection = Database_Access.establishConnection(); 
    try{       
     ResultSet resultTable = Database_Access.generateResultSet("SELECT * FROM " + tableName, connection); 
     ResultSetMetaData resultTableMetaData = resultTable.getMetaData(); 
     ResultSet abvTable = Database_Access.generateResultSet("SELECT * FROM CLSEARCHTABLE", connection); 
     connection.close(); 

     int columns = resultTableMetaData.getColumnCount(); 
     out.printf("Columns: " + columns + "%n"); 

     String [] labels = new String[columns];      
     for(int i = 1; i <= columns; i++){ 
      labels[i-1] = resultTableMetaData.getColumnLabel(i).toString(); 
      out.printf("Label: " + labels[i-1] + "%n"); 

     } 

     Map<String, String> dbVals = new HashMap<String, String>(); 

     resultTable.first();     
     while(!resultTable.isAfterLast()){ 

      for(String s: labels){ 
       dbVals.put(s, resultTable.getString(s)); 
      }    
      User_Search_Profile user = new User_Search_Profile(dbVals.get("region"), dbVals.get("category"), 
        dbVals.get("name"), dbVals.get("email"), dbVals.get("search"), dbVals.get("lasthash"));     
      users.add(user);      
      resultTable.next(); 


     }   
     resultTable.close(); 


     abvTable.first(); 
     for(User_Search_Profile user: users){     

      while(!abvTable.isAfterLast()){ 
       if(abvTable.getString(1) == user.getCategory()){ 
        user.setCategoryAbv(abvTable.getString(2)); 
       } 
       if(abvTable.getString(1) == user.getRegion()){ 
        user.setRegionAbv(abvTable.getString(2)); 
       } 
       abvTable.next(); 

      } 
      user.printUser(out); //Calls the user object print 
     } 

    } 

和用戶對象部分:

public void printUser(PrintStream out){ 
    out.printf("--User--%n%n"); 
    out.printf("Name: " + name + "%n"); 
    out.printf("Email: " + email + "%n"); 
    out.printf("Reg: " + region + "%n"); 
    out.printf("Abv: " + regionAbv + "%n"); 
    out.printf("Cat: " + category + "%n"); 
    out.printf("Abv: " + categoryAbv + "%n"); 
    out.printf("Search: " + searchString + "%n"); 
    out.printf("Hash: " + lastHash + "%n"); 
    //out.flush(); 

} 

這裏是放出來連續運行:

james ~/heroku/java-getting-started $ heroku local worker 
forego | starting worker.1 on port 5100 
worker.1 | Columns: 6 
worker.1 | Label: region 
worker.1 | Label: category 
worker.1 | Label: name 
worker.1 | Label: email 
worker.1 | Label: search 
worker.1 | Label: lasthash 
worker.1 | --User-- 
worker.1 | 
worker.1 | Name: James 
worker.1 | Email: ************ 
worker.1 | Reg: Clackamas County 
worker.1 | Abv: null 
worker.1 | Cat: Jobs 
worker.1 | Abv: null 
worker.1 | Search: Web Developer 
worker.1 | Hash: ccdd352048003f7feae23004c5df2caa 
james ~/heroku/java-getting-started $ heroku local worker 
forego | starting worker.1 on port 5100 
worker.1 | Columns: 6 
worker.1 | Label: region 
worker.1 | Label: category 
worker.1 | Label: name 
worker.1 | Label: email 
worker.1 | Label: search 
worker.1 | Label: lasthash 
worker.1 | --User-- 
worker.1 | 
worker.1 | Name: James 
worker.1 | Email: ********** 
james ~/heroku/java-getting-started $ heroku local worker 
forego | starting worker.1 on port 5100 
worker.1 | Columns: 6 
worker.1 | Label: region 
worker.1 | Label: category 
worker.1 | Label: name 
worker.1 | Label: search 
worker.1 | Label: lasthash 
worker.1 | --User-- 
worker.1 | 
worker.1 | Name: James 
worker.1 | Email: *********** // not encrypted just personal 
worker.1 | 
worker.1 | Abv: null 
worker.1 | Cat: Jobs 
james ~/heroku/java-getting-started $ 

我超混淆。看起來有一個緩衝區問題,或輸出到別處,但如果我知道在哪裏,該死的。任何幫助將不勝感激,因爲調試幾乎不可能的地方,我不能驗證輸出。

回答

1

問題是基礎forego工具,其中heroku local用於運行您的過程。

我認爲工具帶仍然會安裝foreman,所以您可以嘗試運行foreman start worker

最後,您可以隨時手動運行Procfile命令,但您也需要手動設置env vars。

+0

謝謝。我不確定那是否是。在安裝工頭後,我得到一致的輸出! :)現在我可以解決'我'的問題。 – CaptnJunks

相關問題