• 締切済み

VB2015 例外処理について

Windows10、VS2015 Community上で、 以下の文で例外処理が発生しました。 PctureBox1.Image.Save("C:fileName.png) この処理は、PictureBox1.Image に画像を内製したものを一度HDDに保存し、 すぐにこのFileを読み込み、別の用途に供するために使います。 これを何度か繰り返していると、以下の例外処理(添付画像1)が発生して、 処理は中断されます。私には、この画像から例外の理由を判断することは 出来ませんでした。 そこで、例外処理を以下のように設けました。 Try PctureBox1.Image.Save("C:fileName.png) Catch ex As Exception System.Console.WriteLine(ex.Message) End Try この結果、処理は、継続され結果的には正しく終了しました。 ただし、例外処理を捕捉した時のMSGは以下の通りです。 'Plan2016.vshost.exe' (CLR v4.0.30319: Plan2016.vshost.exe): 'C:\WINDOWS \Microsoft.Net\assembly\GAC_MSIL\System.Drawing.resources \v4.0_4.0.0.0_ja_b03f5f7f11d50a3a\System.Drawing.resources.dll' が読み込まれました。 モジュールがシンボルなしでビルドされました。 ということで、例外処理を挿入したことにより、処理は最後まで出来ましたが、 このままで終了するには、寝覚めが悪いです。 考えられる問題と、これを回避する方法をご教授頂きたくお願いいたします。

みんなの回答

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

このコードはあっているのでしょうか? PctureBox1.Image.Save("C:fileName.png) ファイル名のところは、"C:\fileName.png"ではないのでしょうか?

rtagongman
質問者

補足

oboroxx様、ご回答ありがとうございます。 返信が遅れました。ご回答に対する返信方法がわからず遅くなりました。 実際の文は、かなり長いので省略して投稿しました。申し訳ありません。 実際にはご指摘の通り。バックスラッシュ(実際には¥)が必要でした。また、ファイルが.pngの 場合は、もう少し複雑ですので、実際の記述をいたします。 frm.PictureBox6.Image.Save("C:\PlanTemp\" & Format(i, "000") & BallColor & "Ball.png", System.Drawing.Imaging.ImageFormat.Png) 途中にディレクトリが幾つかと、File名を特定する文字を間接的に使用しております。 また、png画像の場合、 System.Drawing.Imaging.ImageFormat.Png が必要のようです。 実際には、このような記述で実行しております。 よろしく、お願いいたします。

関連するQ&A

  • 例外処理に関して

    質問なのですが、よろしくお願い致します。 ファイルに空白行があった場合、任意に例外を発生させることをしているのですが、 (例外処理内容:ファイルにログを出力する) 例外が2回キャッチされているようで、2回目にファイル(ログファイル)は既に開かれています。というエラーが出ますが、以下のソースでは、呼出元と呼び出されたメソッドともに例外を処理してしまうのでしょうか? また、どう改善したらいいでしょうか? ご教授よろしくお願い致します。 呼出元 public Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Try    Dim cls As New testClass cls.timer1() Catch e as Exception 'ログファイル出力 End Try End Sub 呼び出されるメソッド Public Sub Timer1() try FileOpen(1,"ファイルパス",OpenMode.Input) if Trim(LineInput(1)) = "" Then FileClose(1) Throw New Exception End If Catch e as Exception    'ログファイル出力 End Try End Sub

  • 例外処理があまり使われない理由について

    C++でのプログラミングに関して質問です。 只今勉強中で色々な方のソースを拝見していますが、 参考書や解説サイトにはよく載っている「例外処理(tryとかcatchとか)」を記述したソースを殆ど見ないのですが、 例外処理は使わない方がいいのでしょうか? (処理速度が遅くなるとか、gotoのような暗黙の使ってはいけない理由があるのですかね?) 私自身も面倒なので例外処理は今まで書いたことがないのですが、 例外処理を記述する癖をつけた方がいいでしょうか?

  • VB.net 任意の例外を発生させるには・・・

    いつも参考にさせていただいています。 現在以下の環境にてアプリ作成を行っております。 OS:Windows XP SP2 言語:VB.net 2005 SP1 .netFrameWork SDK ver2.0 質問: 現在作成中のアプリにて、特定のエラー(System.Net.WebException)をCatchし、その動作を3回までリトライ可能にするPG作成を行っております。 但し、3回を超えても同じエラーが返された場合はその特定のエラー(System.Net.WebException)を例外として発生させたいのですが、動的にこの例外を発生させる術が分かりません。 尚、Err.Raiseにて動的にエラーを発生できるようですが、 System.Net.WebExceptionを発生させる為の引数の数値が 分かりません。 以下、サンプルを記述します。 ご存知の方、宜しくお願いします。 dim RetryCount as Integer Do While Not accessWeb(・・・) RetryCount += 1 If RetryCount <= 3 Then 'ログ出力("WebAccess失敗の為、リトライします。(" & RetryCount & "/3回目)") Else 'ログ出力("WebAccess失敗の為、異常終了。" ) ※※※※※ここで例外(System.Net.WebException)を発生させアプリを終了させたい。※※※※※ End If Loop Private Function accessWeb(・・・) As Boolean Try 例外(System.Net.WebException)が発生する可能性のある処理 Return True '正常終了時 Catch ex As System.Net.WebException Return False '例外発生 End Try

  • 例外に困っています

    現在自分でiアプリを作成しているのですが、初回ダウンロードでスクラッチパッドにアプリ内で使用する画像を書き込む段階での例外に悩んでいます。 確認した限りではN端末でしか出ないようです。 具体的には以下のような感じです。 //イメージファイル読み込み try { MediaImage m; for (int i=0;i<48;i++) { m=MediaManager.getImage("resource:///"+i+".gif"); m.use(); image[i]=m.getImage(); } } catch (UIException UIEx) { System.out.println("status="+UIEx.getStatus(); } 調べた結果、useメソッドで例外(UIException)が吐かれているらしく、ステータスを調べたところ、2(システムリソースが確保できていない?)でした。 例外が吐かれた後も、別にとってきた画像が使えないわけではなく、ちゃんと次の画面でその画像を表示できています。 いったい何が原因なのでしょうか。 N端末以外だと例外が吐かれていないので、プログラミングは間違っていないはずなのですが・・・。

  • ハンドルされていない例外

    Vistaを使用しています 最近、このようなエラーが頻繁に出るのですが パソコン初心者のため良くわかりません どうすればいいのでしょうか? Just-In-Time (JIT) デバッグを呼び出すための詳細については、 ダイアログ ボックスではなく、このメッセージの最後を参照してください。 ************** 例外テキスト ************** System.ComponentModel.Win32Exception: 指定されたファイルが見つかりません。 場所 System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) 場所 System.Diagnostics.Process.Start() 場所 System.Diagnostics.Process.Start(ProcessStartInfo startInfo) 場所 System.Diagnostics.Process.Start(String fileName, String arguments) 場所 imstrayicon.MainForm.ReadRegistry() 場所 imstrayicon.MainForm.OnStartTimerElapsed(Object sender, EventArgs e) 場所 System.Windows.Forms.Timer.OnTick(EventArgs e) 場所 System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m) 場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ************** 読み込まれたアセンブリ ************** mscorlib アセンブリ バージョン: 2.0.0.0 Win32 バージョン: 2.0.50727.4214 (VistaSP2GDR.050727-4200) コードベース: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll ---------------------------------------- imstrayicon アセンブリ バージョン: 6.0.5830.12 Win32 バージョン: 6.0.5830.12 コードベース: file:///C:/Program%20Files/Dell%20Support%20Center/imstrayicon.exe ---------------------------------------- System アセンブリ バージョン: 2.0.0.0 Win32 バージョン: 2.0.50727.4212 (VistaSP2GDR.050727-4200) コードベース: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Windows.Forms アセンブリ バージョン: 2.0.0.0 Win32 バージョン: 2.0.50727.4214 (VistaSP2GDR.050727-4200) コードベース: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System.Drawing アセンブリ バージョン: 2.0.0.0 Win32 バージョン: 2.0.50727.4016 (NetFxQFE.050727-4000) コードベース: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Management アセンブリ バージョン: 2.0.0.0 Win32 バージョン: 2.0.50727.4016 (NetFxQFE.050727-4000) コードベース: file:///C:/Windows/assembly/GAC_MSIL/System.Management/2.0.0.0__b03f5f7f11d50a3a/System.Management.dll ---------------------------------------- System.Xml アセンブリ バージョン: 2.0.0.0 Win32 バージョン: 2.0.50727.4016 (NetFxQFE.050727-4000) コードベース: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- mscorlib.resources アセンブリ バージョン: 2.0.0.0 Win32 バージョン: 2.0.50727.4214 (VistaSP2GDR.050727-4200) コードベース: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll ---------------------------------------- System.Windows.Forms.resources アセンブリ バージョン: 2.0.0.0 Win32 バージョン: 2.0.50727.4016 (NetFxQFE.050727-4000) コードベース: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_ja_b77a5c561934e089/System.Windows.Forms.resources.dll ---------------------------------------- ************** JIT デバッグ ************** Just-In-Time (JIT) デバッグを有効にするには、このアプリケーション、 またはコンピュータ (machine.config) の構成ファイルの jitDebugging 値を system.windows.forms セクションで設定しなければなりません。 アプリケーションはまた、デバッグを有効にしてコンパイルされなければ なりません。 例: <configuration> <system.windows.forms jitDebugging="true" /> </configuration> JIT デバッグが有効なときは、このダイアログ ボックスで処理するよりも、 ハンドルされていない例外はすべてコンピュータに登録された JIT デバッガに設定されなければなりません。

  • 0除算の例外処理ができない!!助けて!!

    0除算の例外処理ができない!!助けて!! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Try If (Flag = "数値") Then Flag = "演算子" Work = Total + Calc + Input Total = js.Eval(Work) Input = "" TextBox1.Text = Total End If Catch ex As Exception MessageBox.Show("Exception Error : 0除算を行いました。") End Try ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Total + Calc + Inputは、すべて文字列です。 実行すると、ポップアップではなく、テキストエリアにこんな文字列が・・・ 0除算しても例外が発生しない・・・ 0 / 0 ・・・NaN (非数値) 1 / 0 ・・・+∞ そもそも、0除算ってなんですか??? 0で割っても例外が出ない!!

  • VB.NETでのPictureBoxによる画像保存について

    またお世話になります。 VB.NETでプログラムでPictureBoxに絵を描かせているのですが、そこまでは表示させることができました。このできた画像をBitmapなりjpegなりに保存させて、ほかの画像ビューワ等でも見れる形にしたいのですがうまくいきません。 ちなみに今はこのように書いて、 Dim gra1 As Graphics = PictureBox1.CreateGraphics FileOpen(2, myfile2, OpenMode.Output) (絵を描かせるプログラム) PictureBox1.Image.Save(myfile2, System.Drawing.Imaging.ImageFormat.Bmp) FileClose(2) としてまわしたところ、 System.Runtime.InteropServices.ExternalException' のハンドルされていない例外が system.drawing.dll で発生しました。 追加情報 : GDI+ で一般的なエラーが発生しました。 といわれました。 どなたかご教授いただけたらお願いしますm(__)m

  • VB.NETにおける二値化処理の高速化

    いつも参考にさせて頂いております。 現在、VB.NET(VS2003/.NET Framework1.1)を使用して画像の二値化処理のプログラムを作成しております。 処理する事は簡単で、ビットマップファイルのRED要素を取り出し、閾値内なら白に変換して二値化するプログラムです。 以下がそのプログラムです。 ----- '変換する前の画像をファイルから読み込む Dim img1 As System.Drawing.Bitmap = New System.Drawing.Bitmap(filepath) '変換後のビットマップ Dim img2 As System.Drawing.Bitmap = New System.Drawing.Bitmap(img1.Width, img2.Height) '二値化処理 Dim b As Byte For i = 0 To img1.Width - 1 For j = 0 To img1.Height - 1 b = img1.GetPixel(i, j).R If b >= 閾値下限 And b <= 閾値上限 Then img2.SetPixel(i, j, Color.White) Else img2.SetPixel(i, j, Color.Black) End If Next Next PictureBox1.Image = img ----- これで処理は出来るのですが、ファイルが大きい場合は、非常に時間が掛かってしまいます。処理速度はCPUの速度にもよると思うのですが、できるだけ高速化したのですが、何かよい知恵があればご教授頂けると助かります。よろしくお願いいたします。 XP Pro SP2/VS2003/VB.NET/.NET Framework1.1

  • 例外処理の付け方

    javaを使って通信のプログラムを作成しています。 ホストAで送信データを作成し、そのデータをホストBに送信して、 ホストAが送信するのにかかった時間と、ホストBが受信するのにかかった時間を 計測するプログラムを作成しました。 送信と受信の処理を行うのですが、送信側では、write()でバッファに書き込んで、 fulsh()で書き込まれたバイトを出力ストリームに書き込みます。 受信側では、while((ch=in.read()) != -1)で送信データをすべて読み込ませます。 write()、fulsh()を使って送信し、read()で受信するのですが、 これらのメソッドが正常に動いたかどうかを調べたいのです。 ネットで方法を調べたのですが、try catchを使うことで例外処理が発生したら、 エラーを出力させることができることがわかりました。 もしurite(),fulsh(),read()が正常に起動しないならエラーを出したいのです。私なりに考えて以下のようにしました。 コードは以下のとおりです。送信部分、受信部分です。 送信側 int count = 0; // write()の回数 System.out.println("<データ送信処理>"); start = System.nanoTime(); // 計測開始時間 for (int i = 0; i < Data - 2; i++) {   try {     out.write(i);     count++;   } catch (IOException e) {     System.out.println(i + ":書き込みエラー");   } } try{   out.write('\\'); }catch(IOException e){   System.out.println("\\" + "書き込みエラー"); } try{   out.write('s'); }catch(IOException e){   System.out.println("s" + "書き込みエラー"); } count = count + 2; out.flush(); stop = System.nanoTime(); // 計測終了時間 System.out.println("送信完了"); 受信側 while (ch != -1) {   try{     ch = in.read();   }catch(IOException e){     System.out.println("読み込みエラー");   }   Count++;   if (ch == '\\') {     on = true;   } else if (on == true && (char) ch == 's') {     stopNs = System.nanoTime();     System.out.println("受信終了時間を確認");     break;   } else if (on == true && (char) ch != 's') {     on = false;   } } メソッドが正常に起動しない場合は、例外処理を行うということを したいのですが、上の方法は正しいのでしょうか? このようにして実行しても、「入力エラー」と言う表示はされません。 もしかしたら、ただ異常な動作が行われていないから、そういったエラーが 表示されないのかもと考えましたが、例外処理の書き方が違う可能性があると思い、 質問させていただきました。 どなたかアドバイスしていただけないでしょうか?

    • ベストアンサー
    • Java
  • 例外処理を条件式として使っていいのですか?

    Java初心者です。 以下の様にしているのですが、 for(int i = 0; i < 10; i++){ try { NullPointerException 例外が出る処理 } catch (NullPointerException e) { break; //e.printStackTrace();//例外をコンソールに表示させない。 } } は、以下のようなforを使うのとどのはどちらがいいのでしょうか。 条件式がたくさん必要な場合があり、catch したほうが楽なような気がします。 for(int i = 0; i < 10; i++){ if(例外が出る処理==null){ break; } } また、安全性はどうなのでしょうか。 根本で間違っているのではないかと思い不安で質問しております。 お詳しい方がおられましたら教えて下さいませんでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • Java