Я хочу передать моему модулю визуализации некоторые значения из другого класса. После того, как средство визуализации вычислит значения, у меня есть мьютекс во вспомогательном классе, который должен сообщить мне, что средство визуализации завершило расчет, чтобы я мог продолжить с этими новыми значениями. Я могу передать значения рендереру без проблем, но не могу понять, как их вернуть. В настоящее время я использую некоторые статические переменные, но после их изменения средством рендеринга они, кажется, теряются. Они не видны в другом моем классе. Пример:
Класс
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 в модуле визуализации, но мой другой класс всегда видит это как false .Есть идеи, почему? Я предполагаю, что это потому, что он находится в другом потоке, но как я могу это решить? Если есть более чистый и безопасный подход, я был бы рад его услышать.