部族考課二総括

7944 ワード

部族考課二総括
  • タスク:作成ファイル転送アシスタント
  • 難点
  • 難点1:履歴
  • の大部分の実装方法(簡単だがバグがある):
  • より良い実装方法(複雑だが全面的):
  • 難点2:表情パック欄
  • 難点3:ファイルを送信ボックス
  • にドラッグ&ドロップ
  • FAQ
  • タスク:ファイル転送アシスタントの作成
    難点
    難点1:履歴
    ほとんどの実装方法(単純だがバグがある):
    ナレッジポイント:StyledDocumentオブジェクトをシーケンス化および逆シーケンス化して書き込み
    	ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(aimFile));
    	oos.writeObject(StyledDocument);
    	oos.close();
    

    さらにそれを逆シーケンス化してJTextPaneに表示
    	ObjectInputStream ois = new ObjectInputStream(new FileInputStream(aimFile));
    	Object o = ois.readObject();
    	ois.close();
    	StyledDocument sd = (StyledDocument) o;
    	JTextPane= new JTextPane(sd);
    

    注:逆シーケンス化後に表示されるオブジェクトは、リスニング効果が失われます.
    より良い実装方法(複雑だが包括的):
    知識点:IOストリームファイル転送文字:0ファイル:1はtypeオブジェクトで格納し、文字かファイルかを判別する①ファイル接尾辞記号を習得してファイルタイプを判断し、格納用タグで異なるタイプのファイルを格納する例:@File ID+ファイル名がテキストに読み出されるフォーマット、時刻+/n+文字/@File ID+ファイル名②送信したピクチャやテキストなどをIOストリームで1つ相対位置に格納する
    		//       
    		//srcFile      
    		FileInputStream fis = new FileInputStream(srcFile);
    		//       
    		//aimFile      
            FileOutputStream fos = new FileOutputStream(aimFile);
            //    
            int len;
            byte[] b = new byte[1024];
            while ((len = fis.read(b)) != -1) {
                fos.write(b, 0, len);
                fos.flush();
            }
            fos.close();
            fis.close();
    

    ③最後に、テキスト記録により、1つの記録の復元を行い、ピクチャ、ファイルを、記憶されているパスファイル名に応じて、ピクチャまたはファイルボタン挿入表示のJTextPaneオブジェクトに復元し、ファイルボタンはそれをリスニングしてファイルを開く必要がある.注意:テキストが全部読んでから画像、ファイルを挿入する場合は、まず画像、ファイルカーソルの記憶、そして最後のカーソル位置の置後を行わなければなりません.
    java.awt.Desktop.getDesktop().open(file);
    

    注意:read(byte[]b)作用:FileInputStreamの方法は、入力ストリームから一定数のバイトを読み出し、バッファ配列bに格納する.
    write(byte[]b)の役割:OutputStreamの方法で、バッファバイト配列のすべてのコンテンツをストリームに書き込むことができ、配列全体の長さに満たない「空きコンテンツ」なので、コードのwrite(b,0,len)を使うとより厳格にスペースを節約できます.
    flush()作用:ストリームを洗い流し、すべてのバッファのデータを目的地close()に強制送信する作用:出力ストリーム関連を洗い流して閉じる:flush()メソッドを手動で呼び出し、バッファプール内のデータを強制的に洗い出し、データ長がバッファプールのサイズを満たさない場合でも、データの正常な送信を保証する.もちろん、ストリームのclose()メソッドを呼び出すと、システムは出力ストリームバッファのデータを自動的にブラシし、ストリームの物理リソースが回収されることを保証します.
    難点2:表情パック欄
    解決方法:実はJDialogの新しいウィンドウを創立して、それから中にいくつかのJbuttonオブジェクトを入れてimageIconを与えて、入れる時に各Jbuttonオブジェクトに対して傍受を追加して、それから選択して、ボタンの情報を比較して、そのキーを発見して送信します:JbuttonはsetNameとgetNameの方法があってファイル名を与えることができますファイル名に基づいて直接表情パックフォルダに検索して表情パックを送信することができます.
    トラブルシューティング3:ファイルを送信ボックスにドラッグ&ドロップ
    解決方法:DropTargetListenerリスニングキーの書き込み:Transferableインタフェース、DnDConstantsクラス、DataFlavorクラス
  • DropTargetDropEventのisDataFlavorSupported(DataFlavor.javaFilleListFlavor)を利用してファイルタイプ
  • かどうかを判断する.
  • さらにそのacceptDrop(DnDConstants.ACTION_MOVE);ドラッグしたデータを受信する
  • List list = (List)(dtde.getTransferable().getTransferData(DataFlavor.javaFileListFlavor));ファイルリストオブジェクトに再読み込み
  • 最後にファイルデータをbuttonに追加し、入力ボックスに追加して
  • を送信する.
    よくある質問
  • パス:多くの兄弟がパスを絶対パスにし、そのパスが作成されたかどうかを判断していないものがあります.
  • 空ポインタ異常catchは行われていません.例えば、ファイルを選択し、選択しないと空ポインタ異常のエラーが発生します.
  • は、異なるアカウントに対して異なるストレージフォルダを設定して履歴ファイルを格納していない.