2016-11-02 3 views
-2

Ich versuche, einen Scanner zu verwenden, um nach einer Reihe von Wörtern zu suchen, wie Sie unten sehen können, aber ich versuche, diesen Scanner zu verwenden, und es friert vollständig mein Programm, ich denke ich ' M weg, brauche einen Rat.Verwenden eines Scanners für Schlüsselwörter mit JFileChooser

  frames.get(frameNo-1).colors.add(currentColor);    
          break; 

     case "LINE":  currentShape = new Line2D.Double(Integer.parseInt(a[1]),Integer.parseInt(a[2]),Integer.parseInt(a[3]),Integer.parseInt(a[4])); 
          frames.get(frameNo-1).shapes.add(currentShape); 
          frames.get(frameNo-1).colors.add(currentColor);    
          break; 

     default: System.out.println("Input Instruction Not Recognized");  
    } 
} 

catch (RuntimeException e) { 
    e.printStackTrace(); 
    System.out.println("Invalid input instruction on line " + lineNo); 
} 
+0

'Zeichenfolge fileName = scan.next();'. Was wird dem Scanner zur Verfügung gestellt? – ifly6

+0

Zuerst schließen Sie 'scan' und versuchen dann, seine' nextLine() 'Methode aufzurufen, die nicht funktionieren kann. – Gumbo

+0

Ich möchte dem Scanner die Datei zur Verfügung stellen, die ich mit Jfilechooser ausgewählt habe, ich habe den close Scan entfernt und es ist funktioniert immer noch nicht. – Adam

Antwort

2
Scanner scan = new Scanner(System.in); 
JFileChooser chooser = new JFileChooser(); 
int status = chooser.showOpenDialog(null); 
String fileName = scan.next(); 

Sie versuchen, einen Scanner zu verwenden, um einige Daten von der Tastatur zu erhalten.

Aber dann zeigen Sie eine JFileChooser an, damit der Benutzer eine Datei auswählt.

Dann versuchen Sie, Daten aus dem Scanner zu lesen.

Nun, wenn Sie etwas an der Tastatur eingeben, wird der Scanner nur sitzen und warten (so loswerden diese Aussage).

Wenn Sie den Scanner verwenden möchten, um die in der Auswahl ausgewählte Datei zu lesen, müssen Sie tatsächlich den ausgewählten Dateinamen abrufen. Etwas wie:

File file = fileChooser.getSelectedFile(); 

Dann können Sie die File mit dem Scanner verwenden.

Scanner scanner = new Scanner(file); 

den Ausschnitt aus den Swing-Tutorial Machen Sie How to Use File Choosers für weitere Informationen und Arbeitsbeispiele, wie Sie die Dateinamen zu erhalten.

+0

Ich habe versucht, es anzupassen, und ich habe kein Glück, ich bin nicht der beste in Java, auf jeden Fall habe ich versucht, einige Dinge zu ändern, die Sie vorgeschlagen haben, aber ich habe immer noch Probleme. – Adam

+0

@Adam, 'Ich habe immer noch Probleme.' - Nun, ich habe keine Ahnung, was Sie Probleme sein könnten, da ich kein Gedankenleser bin. Machen Sie das Problem in Schritten. 1). Erstellen Sie ein einfaches Programm, das einen JFileChooser anzeigt und dem Benutzer ermöglicht, eine Datei auszuwählen. Sie können dann System.out.println (...) verwenden, um die ausgewählte Datei anzuzeigen. 2) Als nächstes erstellen Sie ein Programm, das eine Datei liest, wenn Sie einen Dateinamen mit dem Scanner fest codieren. 3) Sie kombinieren Wissen aus den Programmen 1 und 2, um dynamisch den Dateinamen mit Hilfe der Dateiauswahl auszuwählen. Wenn Sie ein Problem mit irgendeinem Schritt haben, dann veröffentlichen Sie einen [SSCCE] (http://sscce.org/). – camickr

1

Sie mischen ein ereignisgesteuertes Programmierparadigma, eine Swing-GUI, mit einem linearen Konsolenprogrammierungsparadigma, und die beiden mischen sich nicht gut, noch sollten sie sich mischen. Der technische Grund für das Einfrieren Ihres Programms besteht darin, dass Ihre Verwendung von Scanner den Swing-Ereignisthread blockiert und somit nicht die wesentlichen Funktionen zum Zeichnen der GUI und zur Interaktion mit dem Benutzer ausführen kann.

Die Lösung ist einfach: Wählen Sie die eine oder andere, Konsole oder Swing GUI und bleiben Sie dabei.

Beachten Sie, dass es OK ist, die Scanner zu haben scannen die Datei, das ist eine ganz andere Gebrauch davon, aber es ist nicht in Ordnung mit dem System.in arbeiten zu lassen, es sei denn, in ganz bestimmten Situationen, wie zum Beispiel, wenn sie mit sekundären Arbeits Prozesse, und in dieser Situation würden Sie mit dem Scanner in einem Hintergrundthread arbeiten.

Weitere Themen:

  • Naming Verwirrung: Sie geben Klassen, zum Beispiel Rahmen und Komponenten, die Namen, die bereits Teil der Standard-Java-GUI-Bibliothek sind, und dies uns verwirren können, Ihre Ausbilder und auch du selbst. Sie möchten dies vermeiden - verwenden Sie möglichst originale Klassennamen.
  • Code-Formatierung: einige Ihrer Code ist alle linksbündig, so dass es schwer zu lesen und zu debuggen.
  • Fensterwechsel: Sie scheinen GUI-Fenster zu wechseln, ein GUI-Design, das den Benutzer oft ermüden wird. Normalerweise ist es besser, JPanel-Ansichten über CardLayout zu tauschen.
Verwandte Themen