Я хочу передать моему средству визуализации некоторые значения из другого класса. После того, как рендерер вычислил значения, у меня есть мьютекс в классе-помощнике, который должен сказать мне, что обработчик закончил вычисление, чтобы продолжить эти новые значения. Я могу передать визуализатору ценности без проблем, но я не могу понять, как их вернуть. В настоящее время я использую некоторые статические переменные, но после того, как они были изменены рендерером, они, похоже, теряются. Они не видны в моем другом классе. Пример:
Класс
public class View extends SurfaceView{
private void doSomething(){
glSurfaceView.queueEvent(new Runnable() {
@Override
public void run() {
//..
renderer.calculate(stack);
}
});
}
private void doAnotherThing(){
//Never happens:
if(Helper.hasCalculated){
/...
}
}
}
В моем рендерере:
public class MyRenderer implements GLSurfaceView.Renderer{
private void calculate(Stack stack){
Helper.hasCalculated = true
}
}
Мой вспомогательный класс:
public class Helper{
public static volatile boolean hasCalculated = false;
}
hasCalculated определенно установлен в true в рендерере, но мой другой класс всегда считает его ложным. Любая идея почему? Мое лучшее предположение заключается в том, что это потому, что оно в другом потоке, но как я могу это решить? Если будет более чистый и безопасный подход, я буду рад его услышать.