2016-11-02 72 views
-2

我試圖使用掃描儀來掃描一組單詞,因爲你可以看到下面,但是我試圖使用這臺掃描儀,它完全凍結我的程序我想我'離開,需要一些建議。使用掃描儀的關鍵字與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

'String fileName = scan.next();'。提供給掃描儀的是什麼? – ifly6

+0

您首先關閉'scan',然後嘗試調用其nextLine()'方法,該方法無法工作 – Gumbo

+0

我想向掃描器提供我使用Jfilechooser選擇的文件,我已經移除了近距離掃描,它是還是行不通。 – Adam

回答

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

您正在試圖用掃描儀從鍵盤獲取一些數據。

但是,然後你顯示一個JFileChooser讓用戶選擇一個文件。

然後您嘗試從Scanner讀取數據。

除非你在鍵盤上輸入某些東西,否則掃描儀就會坐在那裏等待(所以擺脫這種說法)。

如果您想使用掃描儀來讀取在選擇器中選擇的文件,那麼您實際上需要獲取選定的文件名。喜歡的東西:

File file = fileChooser.getSelectedFile(); 

然後你可以用Scanner使用File

Scanner scanner = new Scanner(file); 

閱讀從How to Use File Choosers Swing的教程部分獲取更多信息,並就如何獲取文件名工作示例。

+0

我試過調整它,我沒有運氣,我不是最好的在任何方式的Java我試着改變一些你已經建議的東西,但我仍然有問題。 – Adam

+0

@亞當,「我仍然有問題。」 - 我不知道你的問題可能是因爲我不是一個心靈讀者。將問題分解成幾個步驟。 1)。創建一個顯示JFileChooser的簡單程序,並允許用戶選擇一個文件。然後可以使用System.out.println(...)來顯示選擇的文件。 2)接下來創建一個程序,用於在使用掃描儀對文件名進行硬編碼時讀取文件。 3)結合程序1和2的知識,使用文件選擇器動態選擇文件名。如果您在任何步驟中遇到問題,請發佈[SSCCE](http://sscce.org/)。 – camickr

1

您正在將事件驅動的編程範例(Swing GUI)與線性控制檯編程範例進行混合,並且兩者混合不好,也不應混用。程序凍結的技術原因是您使用Scanner阻塞了Swing事件線程,因此無法執行繪製GUI和與用戶交互的基本功能。

解決方案很簡單:選擇其中一個,控制檯或Swing GUI並堅持使用它。

注意,它的確定,使掃描儀掃描文件,這是一個完全不同的使用它,但它並不確定把它與System.in在非常特殊的情況下,這樣的二次作業時,工作,除非進程,在這種情況下,你可以在後臺線程中使用Scanner。

其他問題:

  • 命名混亂:你給類,如框架和組件,這已經是標準的Java GUI庫的一部分的名稱,這樣就可以迷惑我們,你的導師,並甚至你自己。你想避免這樣做 - 儘可能使用更多的原始類名。
  • 代碼格式化:您的一些代碼都是左對齊的,因此很難讀取和調試。
  • 窗口交換:您似乎正在交換GUI窗口,這是一種GUI設計,通常會使用戶疲勞。通常更好地通過CardLayout交換JPanel視圖。