ArrayIndexOutOfBoundsException .. WTF ?

0
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Test extends JPanel {
	
	private static final long serialVersionUID = 1L;

	public Test() {
	    try {
	      SwingUtilities.invokeAndWait(new Runnable() {
	        public void run() {
	        	JTextField tf = new JTextField();
	        	tf.setBounds(100, 100, 100, 30);
	        	add(tf);
	        }
	      });
	    } catch (Exception exc) {
	      System.out.println("Can't create because of " + exc);
	    }
	  }

	  public static void main(String[] args) {
	    JFrame frame = new JFrame();
	    Test panel = new Test();
	    frame.getContentPane().add(panel);
	    panel.setLayout(new GridLayout());

	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    frame.setBounds(600, 300, 200, 200);
	    frame.setVisible(true);
	  }

	}

Powyższy kod tworzy sobie JTextFielda. JTextField jak JTextField ... ale pewna sekwencja zdarzeń wyrzuca ArrayIndexOutOfBoundsException. Wpisuje 12345, zaznaczam mychą 34 .. naciskam spację - mam 12 5. Teraz zaznaczam wszystko z lewej na prawą i przepis na ArrayIndexOutOfBoundsException gotowy. Próbowałem wg zaleceń użyć wątku, ale jak widać - nie działa. Pytam więc ... wtf ?

0

Jaka java, jaki kompilator. To jest już mocno ciekawy problem.

0

w nb 6.7.1 java 1.6 update 14 jest to samo

0

Zgłosić na forum SUNa, bo problem leży w sposobie obsługi szerokości czcionek.

0

dziwny efekt bo kasujac np 4 z tego ciagu backspacem jest wszystko ok przy zaznaczaniu lewo-prawo, a juz przy ustawieniu się za 3 i wcisnieciu delete i zaznaczeniu jest error

0

U mnie to występuje w javie build 1.6.0_15-b03. Piszę w Eclipsie wersja 3.5.0.

0

Mogę potwierdzić błąd.

Błąd można uzyskać też tak:

  1. Wpisujemy "12"
  2. Stawiamy kursor pomiędzy 1 i 2
  3. Dodajemy spację (czyli mamy "1 2")
  4. Zaznaczamy tekst myszką (klawiaturą z shiftem jest ok)
$ java -version
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Server VM (build 14.2-b01, mixed mode)
0

U mnie wszystko działa OK. Próbowałem oba sposoby na spowodowanie wyjątku - nie zadziałały(wątek nie został rzucony).

java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
0

u mnie też ok. Testowane na javie od suna 1.6.0u15, jak i openjdk (linux)

0

Trzeba doprecyzować jedną rzecz - wyjątek nie przerywa programu.

Można go jednak zobaczyć w konsoli, gdy zaznaczamy tekst myszą.

0

Ciekawe jest powiązanie numeru wersji z pojawianiem się wyjątku:
1.6u7 nie ma mykhaylo
1.6u14 jest Freakman
1.6u15 jest albo nie ma Eryk Wiking,Tomkiewicz
1.6u16 jest __Krzysiek85, ja

0

Dodam jeszcze siebie. Pierwsza metoda mialem okazje testowac na 1.6u12 (nie bylem w stanie uzyskac wyjatku) i 1.6u17 (pojawił się choć nie za każdym razem - nie mogłem ustalić od czego to zależy).
Dzis pierwszym i drugim sposobem testowane na 1.6u16 i wyjatek uzyskuje za kazdym razem.

0

Jest w 1.6u16 i w 1.6u15...

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