Avatar billede jannek_ek Nybegynder
03. januar 2005 - 00:23 Der er 5 kommentarer

problemer med StringBuffer og StringTokenizer

der må maks vises 30 tegn per linie men for at undgå halve ord har jeg lavet det her:

  int buffC = 0;
  String tekst = "en længere tekst";
  StringTokenizer tok = new StringTokenizer(tekst);
  StringBuffer stump;
  StringBuffer linie;
  public void paint(Graphics g)
  {
    g.setColor(new Color(0, 0, 0));
    g.setFont(new Font("Lucida Console", Font.PLAIN, 12));
    while (tok.hasMoreTokens())
    {
      linie = new StringBuffer();
      for (boolean fuld = false; !fuld;)
      {
        stump = new StringBuffer(tok.nextToken());
        if (linie.length() + stump.length() < 36)
        {
          linie.append(stump+" ");
        }
        else
        {
          fuld = true;
        }
      }
      g.drawString(linie.toString(), 24, buffC * 12 + 32);
      buffC++;
    }
  }

det går fint gennem kompileren men når jeg kører det melder den fejl:

java.util.NoSuchElementException
        at java.util.StringTokenizer.nextToken(StringTokenizer.java:259)
        at VisualWindow.paint(VisualWindow.java:46)
        at sun.awt.RepaintArea.paint(RepaintArea.java:177)
        at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:260)
        at java.awt.Component.dispatchEventImpl(Component.java:3678)
        at java.awt.Container.dispatchEventImpl(Container.java:1627)
        at java.awt.Window.dispatchEventImpl(Window.java:1606)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
Avatar billede jannek_ek Nybegynder
03. januar 2005 - 00:24 #1
VisualWindow er klassen
Avatar billede jakoba Nybegynder
03. januar 2005 - 00:31 #2
du skal teste om tokenixer er tom i BEGGE løkker:

    while (tok.hasMoreTokens())            // ikke kun her
    {
      linie = new StringBuffer();
      for (boolean fuld = false; !fuld && tok.hasMoreTokens();)  // men også her

mvh JakobA
Avatar billede kalp Novice
03. januar 2005 - 00:34 #3
læser du ha-dat? jeg har næsten lige løst præcis sådan en opgave for en af mine venner hehe
Avatar billede jannek_ek Nybegynder
03. januar 2005 - 00:38 #4
nu melder den ikke fejl mere, men der kommer ingen tekst...
Avatar billede joha Nybegynder
08. januar 2005 - 03:02 #5
Du kan kun bruge en instans af StringTokenizer én gang, så når du har løbet while løkken igennem første gang i paint() er tok "opbrugt". Du kan evt løse problemet ved at sige:

public void paint(Graphics g) {
  // Add this line!
  StringTokenizer tok = new StringTokenizer(tekst);
 
  g.setColor(new Color(0, 0, 0));
  g.setFont(new Font("Lucida Console", Font.PLAIN, 12));
  while (tok.hasMoreTokens()) {
  ...
}

Det skulle løse problemet, men er selvfølgelig ikke specielt effektivt!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester