welch bessere Aufgabe zur Entwicklung eigener Fähigkeiten könnte es geben?
du hast doch alle Zeit der Welt, den Code systematisch zu untersuchen,
baue zunächst ein Thread.sleep(100) mit try/ catch drumherum in die Schleife, um nicht von Ausgaben überschwemmt zu werden,
und dann baue Ausgaben ein, System.out.println(), schaue dir an was dein Programm macht! (evtl. auch alternativ ein Debugger)
es geht gewiss in die Schleife rein, sonst nicht endlos,
gib zu Beginn jeder Schleife i aus und den Vergleichswert matrix1**.length
auch ohne Ausgabe kann man schon erahnen, dass i wohl gar nicht erst ansteigen wird,
und das ist ja auch im Code schnell als plausibel zu vermuten, die Erhöhung steht nur in einem if, wer weiß ob das ausgeführt wird
→ sofort mit Ausgabe darin prüfen, OB es ausgeführt wird,
wie kommt das innere if zum Funktionieren? j muss durch die innere Schleife einen bestimmten Wert erreichen, auch diesen loggen,
und dann schaue dir schließlich an was die Schleife mit j denn macht, bis welchen Wert läuft j?
schon ungewöhnlicher dynamischer Endwert matrix1[j].length-1
der von j abhängt, sich in jeder Runde ändern könnte
gewiss ist an dieser Stelle was anderes gemeint, aber wozu das noch genauer erwähnen?
all die Schritte bisher sind die simpelsten, auf die man als Programmierer kommen kann,
was hindert dich, falls du dazu überlegen und was schreiben willst?
falls das ganze zufällig extra eine Aufgabe für dich ist kannst du sie von anderen lösen lassen und ohne Lernfortschritt bleiben,
aber bei allen guten Geistern: dies zu lernen, dies zu können, hier selber zur Lösung zu finden ist zentrale Grundfähigkeit von Programmierung,
solltest du unbedingt unbedingt selber versuchen, genauer analysieren was du alles herausfinden kannst, wo du am Ende nicht weiterkommst!
habe ich vielleicht nicht geschafft, aber nur mit besten Absichten für dich 
ein Kind soll ja auch selber laufen statt bis zum 18. Lebensjahr getragen zu werden (und dann vielleicht zu spät, es noch zu lernen, Langzeitfolgen)
edit: der ganze Aufbau beider Schleifen ist vielleicht durcheinander, i, j, welche Dimension von welchen Arrays durchlaufen,
schreibe dir auch noch auf Papier auf, was genau alles einzeln zu rechnen ist für eine Beispiel-Multiplikation,
und gehe dann im Programm durch ob in der richtigen Reihenfolge dasselbe dran kommt
eine while-Schleife braucht es auch gar nicht, warum keine for-Schleife für i?
Ergebnis mag falsch bleiben, evtl. Exceptions, aber zumindest kann es dann nicht ewig laufen
edit:
und bei while: wieso überhaupt ein if für das j? darf der Fall vorkommen dass sich j nicht erhöht? für welchen Zweck?
so viele einfache Ansatzpunkte, das Problem zu klären