Java-从不同的类打印非静态变量?

时间:2014-07-12 12:13:57

标签: java swing timer

我正在制作游戏,而我现在正在尝试为它制作计时器。我有一个带有计时器的类,它输出一个字符串" time" (是一个字符串,不是一个整数,所以我可以采用格式" 2:30"。

最初,我为字符串做了一个getter,在我的主类中找到了我的render方法,并输入了

g.drawString(Timer.getTime(), 700, 40);

然而,这并没有奏效,因为吸气剂不是静态的。

为了解决这个问题,我在Timer类中创建了一个单独的render方法,然后在主render方法下调用它。即

Timer time = new Timer();
time.render(g);

这只给了我一个错误。

at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)

有关如何解决此问题的任何想法? 非常感谢!

编辑:g是图形。

编辑:错误消息以&#34开头;线程中的异常" AWT-EventQueue-1" java.lang.NullPointerException:String为null"并且只要应用程序正在运行就会循环。

编辑:Timer类正在被另一个类每秒运行一次,用于我称之为" start。"这可能是问题吗?

编辑:我是1周新编程,所以如果需要更多必要信息,请在下面发表评论。

2 个答案:

答案 0 :(得分:0)

  

g.drawString(Timer.getTime(),700,40);

我怀疑这里的问题是你试图使用Timer 而不是实例计时器

Timer time = new Timer();
g.drawString(time.getTime(), 700, 40);

应该按预期工作。

答案 1 :(得分:0)

很抱歉,但鉴于您的问题的当前状态,我们只能尝试尝试帮助您。我再次请求,恳求您尝试改进您的问题,尝试向我们提供更多相关信息,以帮助我们更好地理解您的问题并帮助您解决问题。

NullPointerExceptions的键是异常的前几行,由于某种原因你还没有向我们展示过。这些行会告诉您完全您的代码中抛出异常的位置,您需要为我们识别此行。

至于我的SWAG,我猜你在程序中运行的某个地方有一个活动的Timer对象,并且你试图在另一个地方显示它的状态,它的时间值视图或GUI类,但由于您在GUI类中使用了错误的Timer实例而变得很糟糕。如果是这样,请确保将正确的Timer实例传递到GUI中,这可以通过构造函数参数或getter方法完成:

public class MyGuiClass extends JPanel {
   private Timer myTimer;

   public MyGuiClass(Timer myTimer) {
      this.myTimer = myTimer;
   }

   //.... now you can use the actual Timer instance
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      g.drawString(myTimer.getTime(), 700, 40);
   }

问题的其他可能原因 - 当Timer类的状态发生变化(但谁知道)时,GUI未正确通知。

请注意,如果这是我的程序,我不会在绘图方法中绘制Timer的String,而只是在JLabel中显示它 - 更容易。此外,如果Timer是您的某个类,您将需要重新命名它,以免将其与java.util.Timer或javax.swing.Timer混淆。