2014-03-05 39 views
0

问题:我试图添加多个使用Java内置图形方法的方法。绘制屏幕的方法使用if语句。当actionListener被激活时,制作一个绘制applet的方法

我试过了:玩弄方法名称并更改(图形g)中的字符。此外,我试图将我遇到问题的方法放入paint方法块中。

中使用的变量:

  • 字长=存储的字的量具有一定长度的数组。例如。如果我有1个1个字母的单词,wordLengths [0]将为1。

以下代码打印我的声母,空白出来的文字字段和油漆图表的x和y轴:

public void paint(Graphics g) { 
     g.drawString("BWD", 450, 490); // Puts my signature in the bottom corner 
     inputField.setText(""); 
     inputText = (""); 
     g.drawLine(50, 450, 460, 450);//Paints x-axis 
     g.drawLine(50, 450, 50, 100);//Paints the y-axis 
    } 

下面的代码具有的方法名称涂料。我试图改变这一点,但它仍然返回问题。当点击提交按钮,我想下面的代码绘制到屏幕上:

public void paint (Graphics g) 
{ 
     for(int j=0, x=50, y = 100; j< wordLengths.length;j++) 
     { 
      if (wordLengths[j] == 1) 
      { 
       y = y+15; 
       g.drawString(wordLengths[j]+ " word of length "+ (j+1), x, y);        
      } 

      g.drawString("There are: ", 50, 90); 

      if (wordLengths[j] > 1) 
      { 
       y = y+15; 
       g.drawString(wordLengths[j]+ " words of length "+ (j+1), x, y); 
      } 
     } 
    } 

理想的代码会是这样:

public void paint(Graphics g) { 
      g.drawString("BWD", 450, 490); // Puts my signature in the bottom corner 
      inputField.setText(""); 
      inputText = (""); 
      g.drawLine(50, 450, 460, 450);//Paints x-axis 
      g.drawLine(50, 450, 50, 100);//Paints the y-axis 

      for(int j=0, x=50, y = 100; j< wordLengths.length;j++) 
      { 
       if (wordLengths[j] == 1) 
       { 
        y = y+15; 
        g.drawString(wordLengths[j]+ " word of length "+ (j+1), x, y);        
       } 

       g.drawString("There are: ", 50, 90); 

       if (wordLengths[j] > 1) 
       { 
        y = y+15; 
        g.drawString(wordLengths[j]+ " words of length "+ (j+1), x, y); 
       } 
      } 

     } 

如果需要任何其他信息,请不要犹豫添加评论,我会尽快收录它!

在此先感谢!

Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException 
at java_assignment.JavaAppletMain.paint(JavaAppletMain.java:114) 
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:264) 
at sun.lwawt.LWRepaintArea.paintComponent(LWRepaintArea.java:54) 
at sun.awt.RepaintArea.paint(RepaintArea.java:240) 
at sun.lwawt.LWComponentPeer.handleJavaPaintEvent(LWComponentPeer.java:1267) 
at sun.lwawt.LWComponentPeer.handleEvent(LWComponentPeer.java:1150) 
at java.awt.Component.dispatchEventImpl(Component.java:4937) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:694) 
at java.awt.EventQueue$3.run(EventQueue.java:692) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:708) 
at java.awt.EventQueue$4.run(EventQueue.java:706) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)) 

    Thread [AWT-EventQueue-1] (Suspended (breakpoint at line 112 in JavaAppletMain))  
    JavaAppletMain.paint(Graphics) line: 112  
    LWRepaintArea(RepaintArea).paintComponent(Component, Graphics) line: 264  
    LWRepaintArea.paintComponent(Component, Graphics) line: 54 
    LWRepaintArea(RepaintArea).paint(Object, boolean) line: 240 
    LWPanelPeer(LWComponentPeer<T,D>).handleJavaPaintEvent() line: 1267 
    LWPanelPeer(LWComponentPeer<T,D>).handleEvent(AWTEvent) line: 1150 
    JavaAppletMain(Component).dispatchEventImpl(AWTEvent) line: 4937  
    JavaAppletMain(Container).dispatchEventImpl(AWTEvent) line: 2287  
    JavaAppletMain(Component).dispatchEvent(AWTEvent) line: 4687  
    EventQueue.dispatchEventImpl(AWTEvent, Object) line: 735  
    EventQueue.access$200(EventQueue, AWTEvent, Object) line: 103 
    EventQueue$3.run() line: 694  
    EventQueue$3.run() line: 692  
    AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]  
    ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 76  
    ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext) line: 87 
    EventQueue$4.run() line: 708  
    EventQueue$4.run() line: 706  
    AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]  
    ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 76  
    EventQueue.dispatchEvent(AWTEvent) line: 705  
    EventDispatchThread.pumpOneEventForFilters(int) line: 242 
    EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 161  
    EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 150 
    EventDispatchThread.pumpEvents(int, Conditional) line: 146 
    EventDispatchThread.pumpEvents(Conditional) line: 138 
    EventDispatchThread.run() line: 91 
+0

究竟是什么问题?你的'paint()'方法是否启动? –

+0

当我在发布的第一个代码块中包含if语句时,它会返回致命错误。 – bradleyduncan

+0

然后在这里粘贴堆栈跟踪(错误)。 –

回答

3

你只是初始化在actionPerformed你的阵列wordLenghts。但在程序启动时会调用paint,并且actionPerformed永远不会被初始化为数组。这就是为什么你会得到NPE

您应该在构造函数或init方法中初始化它。

private int[] wordLength; 

@Overrde 
public void init() { 
    wordLength = new int[0]; 
} 
+1

由于许多原因,可随时调用Paint。这就是为什么OP不应该改变涂料方法中组件状态的原因;) – MadProgrammer

+0

@MadProgrammer很好。如果你正在阅读bradlyduncan,请注意上面的评论。在你的'paint'方法中''inputField.setText(“”);'应该_never_完成。 –

+0

我已经将inputField.setText移动到actionPerformed方法,当提交被点击并添加repaint();.非常感谢你@peeskillet和MadProgrammer! – bradleyduncan