2013-10-14 33 views
0

我想在另一個類中使用int a的值。我有一種方法可以訪問另一個類中的a變量。我想用這個方法獲得a的值,並在我的主類中使用它。方法及其變量

public class Neram { 

    private static int a; 

    private static void timedel() { 
    // TODO Auto-generated method stub 
     for(int i=0;i<20000;i++) 
     { 
      try { 
      Thread.sleep(1000); 
      } catch (InterruptedException e){} 
      a=a+1; 
     } 
    } 
} 

我想用int a作爲我的其他類別的時間計數器,然後執行代碼時a變成100

所有我想要的是使用的方法和得到的`a的值,然後使用它:

if (a > 100) { 
    // say time over 
    if(a>150) 
    // your taking too long 
    if(a>200) 
    // that s it Stop RIGHT now 
} 
+0

有更好的方法來完成這種任務(在一個定時器上增加一個變量) - 特別是因爲你所採用的路由不是**保證每秒增加1(現在,它可能會,特別是如果你的線程數很低...)。爲了正確回答你的問題,我們需要知道你在主課堂中如何使用'a' /你正在做什麼。 –

回答

1

構造請使用的TimerTask處理器這些類型的工作..你更容易。

對於TimerTask的: - http://enos.itcollege.ee/~jpoial/docs/tutorial/essential/threads/timer.html

來回處理器: - http://examples.javacodegeeks.com/android/core/os/handler/android-handler-example/

以上只是一個例子,如果你不喜歡嘗試任何其他的例子。


Handler handle = new Handler();

可運行可運行=新的Runnable(){

@Override 
    public void run() { 
     //what ever you want to do... 
    } 
}; 

//如何以任何方法調用等(的onCreate)

手柄.postDelayed(可運行,100);

*** *計時器任務 公共類JavaReminder { 定時器定時器;

public JavaReminder(int seconds) { 
    timer = new Timer(); //At this line a new Thread will be created 
    timer.schedule(new RemindTask(), seconds*1000); //delay in milliseconds 
} 

class RemindTask extends TimerTask { 

    @Override 
    public void run() { 
     System.out.println("ReminderTask is completed by Java timer"); 
     timer.cancel(); //Not necessary because we call System.exit 
     //System.exit(0); //Stops the AWT thread (and everything else) 
    } 
} 

public static void main(String args[]) { 
    System.out.println("Java timer is about to start"); 
    JavaReminder reminderBeep = new JavaReminder(5); 
    System.out.println("Remindertask is scheduled with Java timer."); 
} 

}

輸出 的Java定時器即將開始 Remindertask計劃與Java定時器。 ReminderTask由Java定時器完成//這將在5秒後打印

+0

得到了很多的錯誤與計時器任務:( – Anu

+0

此,我想加我一個值' 如果(> 10){ \t爲(雪碧WAVE2:精靈){ \t wave2.onDraw(畫布); \t } \t }' – Anu

+1

嗨阿努對不起,對於最近的答覆...我改變了上述答案請檢查,如果你的問題是通過這種友好解決接受這個答案... –

0

使「int a」成爲您試圖從中訪問它的任何類的靜態成員。只需使用static關鍵字來聲明它。不過,理解Java爲什麼能夠工作很重要。所以我強烈建議你快速閱讀Java中的類成員和不同的訪問修飾符。

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

此外,一定要注意同步問題,如果你會從另一個線程內訪問INT一個。

+0

如果你要推薦'static'成員,至少應該提供一個原子包裝,這樣它就會成爲線程安全的。就我個人而言,我儘可能避免公開可變靜態成員;取決於他的使用情況,將'a'靜態化可能是錯誤的建議(儘管需要更多信息)。 –

0
public class Neram { 

    public static int a; 

    private static void timedel() { 
    // TODO Auto-generated method stub 
     for(int i=0;i<20000;i++) 
     { 
      try { 
      Thread.sleep(1000); 
      } catch (InterruptedException e){} 
      a=a+1; 

      if (a>100) 
       new Main1 (a); 
     } 
    } 
} 

將該文件導入到主類的包中,並進行更改..did你只需要這個或其他東西?

的MAIN1類必須有一個像

Main1(int b) 
+0

如果我想在值不斷增加時顯示更多內容,該怎麼辦? – Anu

+1

添加更多'ifs'? – user2837260

0

通常,您可以註冊一個回調方法,並通過此回調方法在不同線程之間共享變量值。但是爲了訪問線程之間的共享變量,你必須同步它來進行保護。如將其聲明爲volatile,或使用AtomicInteger,或創建一個鎖。

0

似乎是一個更簡單的解決辦法是有一個Handler分派消息與一些延遲量,然後處理您的邏輯而不是一個線程執行此操作...