Java 从其他类引用MainActivity中的RadioButton时出错
我创建了一个应用程序,可以用二进制打印时间。 逻辑工作得很好,但是当我尝试分离逻辑和GUI时,遇到了一些问题。似乎存在交叉引用问题,但我似乎找不到 主要活动:Java 从其他类引用MainActivity中的RadioButton时出错,java,android,radio-button,stack-overflow,cross-reference,Java,Android,Radio Button,Stack Overflow,Cross Reference,我创建了一个应用程序,可以用二进制打印时间。 逻辑工作得很好,但是当我尝试分离逻辑和GUI时,遇到了一些问题。似乎存在交叉引用问题,但我似乎找不到 主要活动: package se.macke.binarycounter; import java.util.GregorianCalendar; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.B
package se.macke.binarycounter;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.TextView;
public class MainActivity extends Activity
{
public TextView text0, text;
public Timer timer;
public RadioButton rB00,rB01,rB02,rB03, rB04, rB05, rB06, rB07, rB08, rB09,
rB0A, rB0B, rB0C, rB0D, rB0E, rB0F, rB11, rB12;
RadioButton[] rButtons = new RadioButton[18];
public Executive exec = new Executive(); // This is row 25 in the logcat reference
public GregorianCalendar gregCal = (GregorianCalendar) GregorianCalendar.getInstance();
逻辑类:
/**
*
*/
package se.macke.binarycounter;
import static java.lang.System.out;
import java.util.GregorianCalendar;
import android.widget.RadioButton;
/**
* @author macke
*
*/
public class Executive
{
//Converts the numbers to a long string with new rows
RadioButton[] rButtons = new RadioButton[18];
GregorianCalendar gregCal = new GregorianCalendar();
MainActivity m = new MainActivity(); // This is row 21 in the LogCat reference
private int sec = gregCal.get(GregorianCalendar.SECOND); // time units
private int min = gregCal.get(GregorianCalendar.MINUTE);
private int hour = gregCal.get(GregorianCalendar.HOUR);
日志的摘录:
08-25 13:43:53.459: E/AndroidRuntime(383): FATAL EXCEPTION: main
08-25 13:43:53.459: E/AndroidRuntime(383): java.lang.StackOverflowError
08-25 13:43:53.459: E/AndroidRuntime(383): at java.util.Arrays.binarySearch(Arrays.java:405)
08-25 13:43:53.459: E/AndroidRuntime(383): at org.apache.harmony.luni.internal.util.ZoneInfo.getOffset(ZoneInfo.java:168)
08-25 13:43:53.459: E/AndroidRuntime(383): at org.apache.harmony.luni.internal.util.ZoneInfo.getOffset(ZoneInfo.java:162)
08-25 13:43:53.459: E/AndroidRuntime(383): at java.util.GregorianCalendar.fullFieldsCalc(GregorianCalendar.java:495)
08-25 13:43:53.459: E/AndroidRuntime(383): at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:658)
08-25 13:43:53.459: E/AndroidRuntime(383): at java.util.Calendar.complete(Calendar.java:839)
08-25 13:43:53.459: E/AndroidRuntime(383): at java.util.Calendar.setTimeInMillis(Calendar.java:1339)
08-25 13:43:53.459: E/AndroidRuntime(383): at java.util.GregorianCalendar.<init>(GregorianCalendar.java:339)
08-25 13:43:53.459: E/AndroidRuntime(383): at java.util.GregorianCalendar.<init>(GregorianCalendar.java:239)
08-25 13:43:53.459: E/AndroidRuntime(383): at se.macke.binarycounter.Executive.<init>(Executive.java:20)
08-25 13:43:53.459: E/AndroidRuntime(383): at se.macke.binarycounter.MainActivity.<init>(MainActivity.java:25)
08-25 13:43:53.459: E/AndroidRuntime(383): at se.macke.binarycounter.Executive.<init>(Executive.java:21)
08-25 13:43:53.459: E/AndroidRuntime(383): at se.macke.binarycounter.MainActivity.<init>(MainActivity.java:25)
08-25 13:43:53.459: E/AndroidRuntime(383): at se.macke.binarycounter.Executive.<init>(Executive.java:21)
08-25 13:43:53.459: E/AndroidRuntime(383): at se.macke.binarycounter.MainActivity.<init>(MainActivity.java:25)
08-25 13:43:53.459: E/AndroidRuntime(383): at se.macke.binarycounter.Executive.<init>(Executive.java:21)
08-2513:43:53.459:E/AndroidRuntime(383):致命异常:main
08-25 13:43:53.459:E/AndroidRuntime(383):java.lang.StackOverflower错误
08-25 13:43:53.459:E/AndroidRuntime(383):位于java.util.Arrays.binarySearch(Arrays.java:405)
08-25 13:43:53.459:E/AndroidRuntime(383):位于org.apache.harmony.luni.internal.util.ZoneInfo.getOffset(ZoneInfo.java:168)
08-25 13:43:53.459:E/AndroidRuntime(383):位于org.apache.harmony.luni.internal.util.ZoneInfo.getOffset(ZoneInfo.java:162)
08-25 13:43:53.459:E/AndroidRuntime(383):位于java.util.GregorianCalendar.fullFieldsCalc(GregorianCalendar.java:495)
08-25 13:43:53.459:E/AndroidRuntime(383):位于java.util.GregorianCalendar.computeFields(GregorianCalendar.java:658)
08-25 13:43:53.459:E/AndroidRuntime(383):在java.util.Calendar.complete(Calendar.java:839)中
08-25 13:43:53.459:E/AndroidRuntime(383):在java.util.Calendar.setTimeInMillis(Calendar.java:1339)
08-2513:43:53.459:E/AndroidRuntime(383):位于java.util.GregorianCalendar.(GregorianCalendar.java:339)
08-2513:43:53.459:E/AndroidRuntime(383):位于java.util.GregorianCalendar.(GregorianCalendar.java:239)
08-2513:43:53.459:E/AndroidRuntime(383):在se.macke.binarycounter.Executive.(Executive.java:20)
08-2513:43:53.459:E/AndroidRuntime(383):在se.macke.binarycounter.MainActivity。(MainActivity.java:25)
08-25 13:43:53.459:E/AndroidRuntime(383):在se.macke.binarycounter.Executive.(Executive.java:21)
08-2513:43:53.459:E/AndroidRuntime(383):在se.macke.binarycounter.MainActivity。(MainActivity.java:25)
08-25 13:43:53.459:E/AndroidRuntime(383):在se.macke.binarycounter.Executive.(Executive.java:21)
08-2513:43:53.459:E/AndroidRuntime(383):在se.macke.binarycounter.MainActivity。(MainActivity.java:25)
08-25 13:43:53.459:E/AndroidRuntime(383):在se.macke.binarycounter.Executive.(Executive.java:21)
我明白如果可以避免的话,逻辑不应该知道GUI。我应该初始化logic类中的按钮吗?在这种情况下,如何初始化 为执行类使用构造函数。加
Executive(MainActivity activity){
m = activity;
}
使用MainActivity.java:25
public Executive exec = new Executive(this);
使用Executive.java:21
MainActivity m =null;
你真的应该改进这个问题。展示几百行代码并期望有人调试所有代码是不可能得到答案的。如果你能确定代码中哪一部分是错误的,并且只显示那一部分,那就更好了。很有趣!但是不起作用,在第一次引用m时返回nullpointerexception。可能是代码中的其他问题。调动新的行政人员(本次);重新创建活动。在更改ti时不断更新代码