przerywa działanie funkcji

0

Witam,
Poniżej przedstawiam kod swojej klasy, w której mam pole tekstowe i przycisk. Chcę teraz kompiować to, co użytkowanik wpisze w polu tekstowym i wkleić tam jeszcz raz, ale zależy mi na tym, żeby to co wpisze użytkowanik mieć porozdzielane jako osobne napisy, gdzie separatorem jest średnik. Mój problem polega na tym, że program po wciśnięciu przycisku się zapętla i nie działa.
Bardzo proszę o pomoc.

 
package com.example.example;

import java.util.Vector;

import com.vaadin.Application;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.Window;

@SuppressWarnings("serial")
public class ExampleApplication extends Application {

	private TextArea textWithOperations;
	private Button buttonModify;
	private Vector<String> commandsAsString = new Vector<String>();
	private Window mainWindow;

	@Override
	public void init() {
		mainWindow = new Window("Example Application", buildmainlayout());
		Label label = new Label("Hello Vaadin user");
		mainWindow.addComponent(label);
		setMainWindow(mainWindow);
	}

	public HorizontalLayout buildmainlayout() {
		HorizontalLayout mainlayout = new HorizontalLayout();

		textWithOperations = new TextArea();
		mainlayout.addComponent(textWithOperations);

		buttonModify = new Button("Ok");
		buttonModify.addListener(new Button.ClickListener() {
			@Override
			public void buttonClick(final ClickEvent event) {
				checking();
			}
		});
		mainlayout.addComponent(buttonModify);

		return mainlayout;

	}

	private void checking() {
		String operationsToExecute = textWithOperations.getValue().toString();

		int indexOfBegin = 0;
		int indexOfEnd = operationsToExecute.indexOf(';', indexOfBegin);

		while (indexOfEnd != -1) {
			commandsAsString.addElement(operationsToExecute.substring(
					indexOfBegin, indexOfEnd));
			indexOfBegin = indexOfEnd;
			indexOfEnd = operationsToExecute.indexOf(';', indexOfBegin);
		}

		for (int i = 0; i < commandsAsString.size(); i++) {
			textWithOperations.setValue(textWithOperations.getValue()
					+ commandsAsString.elementAt(i));
		}
	}
}


0
  1. Co to textWithOperations.getValue() zwraca? Standardowy sposób odczytania tekstu z TextArea, to textWithOperations.getText().
  2. Użyj do dzielenia na kawałki metody split() albo klasy StringTokenizer.
0

na początek przykład do przeanalizowania:

public class TextTest {

	@Test
	public void shouldTest() {
		Text text = new Text();
		text.setS("aaa");

		for (int i = 0; i < text.size(); i++) {
			text.setS(text.getS()+"a");
			System.out.println(i);
		}
	}
}

class Text {

	private String s;

	public String getS() {
		return s;
	}

	public void setS(String s) {
		this.s = s;
	}

	public int size() {
		return s.length();
	}
}

A teraz wytłumaczenie. Jeżeli w warunku pętli wywołujesz metodę to będzie ona wywołana za każdym razem gdy będzie sprawdzany warunek. Ty w pętli robisz tak:

  • sprawdź długość

  • ustaw tekst jako stary tekst + coś ekstra.

  • sprawdź długość

  • ustaw tekst jako stary tekst + coś ekstra.

  • sprawdź długość

  • ustaw tekst jako stary tekst + coś ekstra.

  • sprawdź długość

  • ustaw tekst jako stary tekst + coś ekstra.

itd. Za każdym razem tekst jest coraz dłuższy i tym samym nie można zakończyć pętli.

1 użytkowników online, w tym zalogowanych: 0, gości: 1