ArrayIndexOutOfBoundsException .. WTF ?

ArrayIndexOutOfBoundsException .. WTF ?
0
Kopiuj
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 ?

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:20 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

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


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
Freakman
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 7 lat
0

w nb 6.7.1 java 1.6 update 14 jest to samo


play hard..go pro.
Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:20 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
0

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


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
Freakman
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 7 lat
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


play hard..go pro.
0

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

__krzysiek85
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 9 lat
  • Postów:1019
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)
Kopiuj
$ 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)

Registered Linux user #456405 | SCJP 6 | SCWCD 5 | SCBCD 5
mykhaylo
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 13 lat
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).

Kopiuj
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)

tomkiewicz
  • Rejestracja:około 23 lata
  • Ostatnio:prawie 3 lata
  • Postów:1193
0

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


__krzysiek85
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 9 lat
  • Postów:1019
0

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

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


Registered Linux user #456405 | SCJP 6 | SCWCD 5 | SCBCD 5
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

VG
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 8 lat
  • Postów:79
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.


Kerai
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:London
0

Jest w 1.6u16 i w 1.6u15...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.