C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.98576 の関連記事表示

<< 0 >>
■98576  メディアプレイヤーでClearした時にエラーが出ます。
□投稿者/ アン -(2021/12/04(Sat) 18:08:44)

    分類:[.NET 全般] 

    こんばんは。

    メディアプレイヤーで再生中にClearボタンを押すとエラーがでます。

    エラー名
    System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'

    コード名

    Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As System.Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange
    Try
    Dim i As Integer
    For i = 0 To AxWindowsMediaPlayer1.currentPlaylist.count - 1
    ’ここでエラーメッセージ出ます。’A
    If AxWindowsMediaPlayer1.currentMedia.isIdentical(AxWindowsMediaPlayer1.currentPlaylist.Item(i)) Then
    ListBox1.SelectedIndex = Str(i)

    End If
    Next

    MetroProgressbar1.Value = 0
    Catch ex As Exception

    End Try
    '省略
    end sub

    原因は
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    '全てクリアされる
    AxWindowsMediaPlayer1.Ctlcontrols.stop()
    AxWindowsMediaPlayer1.currentPlaylist.clear()’←原因はこれなんです。
    'これがあるとエラーになる
    ’コメントアウトしてみるとエラーはでません。
    ’Clearされていない。
    end sub

    1,ファイルを開き、そのまま再生しないでClearは出来ました。
    2,ファイルを開き、再生した後、Clear押すとAでインスタンスに設定されていませんというメッセージが出ます。
    AxWindowsMediaPlayer1.currentPlaylist.clear()でClearしたい場合、すいませんが
    教えてください。よろしくお願いいたします。

    環境:Visual Studio 2022 VB.NETです。
親記事 /過去ログ171より / 関連記事表示
削除チェック/

■98580  Re[1]: メディアプレイヤーでClearした時にエラーが出ます。
□投稿者/ ロッテモナ王 -(2021/12/05(Sun) 00:52:44)
    No98576 (アン さん) に返信

    currentMediaがnullか、もしくは、currentPlaylistがnullなのだと思います

    currentPlaylistがnullだと仮定するとこの行でエラーになるはず
    > For i = 0 To AxWindowsMediaPlayer1.currentPlaylist.count - 1

    しかし、この行ではエラーになってないので仮定は誤りと考えるとcurrentMediaがnullなんじゃないですかね

    nullチェックを入れれば良いと思います
記事No.98576 のレス /過去ログ171より / 関連記事表示
削除チェック/

■98581  Re[2]: メディアプレイヤーでClearした時にエラーが出ます。
□投稿者/ アン -(2021/12/05(Sun) 16:02:38)
    No98580 (ロッテモナ王 さん) に返信
    > ■No98576 (アン さん) に返信

    回答ありがとうございます。
    > currentPlaylistがnullだと仮定するとこの行でエラーになるはず
    >>For i = 0 To AxWindowsMediaPlayer1.currentPlaylist.count - 1
    すいません下のコードです。
    If AxWindowsMediaPlayer1.currentMedia.isIdentical(AxWindowsMediaPlayer1.currentPlaylist.Item(i)) Then

    デバックで「続行」を押すとClearされたメッセージは出ます。

    詳細
    System.NullReferenceException
    HResult=0x80004003
    Message=オブジェクト参照がオブジェクト インスタンスに設定されていません。
    Source=Music_Player
    スタック トレース:
    at Music_Player.Form1.AxWindowsMediaPlayer1_PlayStateChange(Object sender, _WMPOCXEvents_PlayStateChangeEvent e) in パス

    次からスローされた場合を除くにチェック入れた所「出力」に
    例外がスローされました: 'System.NullReferenceException' (***.exe の中)
    と出ます。

    1,ファイル開いてそのままClearするだけならスローされました…は出ません。
    2,ファイルを再生後、Clearボタンを押すとスローされました…が出ます。

    どうしたら解決するんでしょうか?

記事No.98576 のレス /過去ログ171より / 関連記事表示
削除チェック/

■98583  Re[3]: メディアプレイヤーでClearした時にエラーが出ます。
□投稿者/ くま -(2021/12/05(Sun) 18:48:20)
    アンさん落ち着いて、ロッテモナ王さんの回答をよく読んでください。
    1. System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'
    が発生する可能性がある所は2カ所
      a. AxWindowsMediaPlayer1.currentPlaylist
      b. AxWindowsMediaPlayer1.currentMedia
    
    2. エラーが発生した箇所が
    If AxWindowsMediaPlayer1.currentMedia.isIdentical(AxWindowsMediaPlayer1.currentPlaylist.Item(i)) Then
    なので その前で正常に通過したa.の可能性がなくなる。
    
    3. よって
      b. AxWindowsMediaPlayer1.currentMedia
    に対して null判定を行えばよいのでは?
    と発言されています。
    
    それを踏まえて修正するなら以下の通り
    
    Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As System.Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange
            If AxWindowsMediaPlayer1.currentMedia IsNot Nothing Then    '←追加
              Try
                    Dim i As Integer
                    For i = 0 To AxWindowsMediaPlayer1.currentPlaylist.count - 1
                        ’ここでエラーメッセージ出ます。’A
                        If AxWindowsMediaPlayer1.currentMedia.isIdentical(AxWindowsMediaPlayer1.currentPlaylist.Item(i)) Then
                            ListBox1.SelectedIndex = Str(i)
                        End If
                    Next
                    MetroProgressbar1.Value = 0
               Catch ex As Exception
               End Try
            End If     '←追加
    '省略
    end sub
    
    これで「エラー」は発生しません。
    
    で理由は
    AxWindowsMediaPlayer1.currentPlaylist.clear();
    これが何をするかというと「MediaPlayer」で現在使用しているプレイリストを削除(クリア)します。
    そうするとリストがないので当然何のメディアを再生している(いたか)は不明となります。
    そうなれば、AxWindowsMediaPlayer1.currentMediaも現在のメディアは不明の為null(Nothing)になりますよね。
    
    なぜstop()の後にclear()しているのかはアンさんのプログラムの仕様の話なので
    判断できませんのでそれに合わせて修正してみてください。
記事No.98576 のレス /過去ログ171より / 関連記事表示
削除チェック/

■98582  Re[3]: メディアプレイヤーでClearした時にエラーが出ます。
□投稿者/ ロッテモナ王 -(2021/12/05(Sun) 18:13:07)
    No98581 (アン さん) に返信

    > If AxWindowsMediaPlayer1.currentMedia.isIdentical(AxWindowsMediaPlayer1.currentPlaylist.Item(i)) Then

    この行のオブジェクトのどれかがnullなので、まずはそれを特定するのが良いと思います
    デバッガで確認するなり

    Debug.WriteLine(AxWindowsMediaPlayer1.currentMedia)
    こういったデバッグプリントを一時的に仕込むなりで確認できるんじゃないかと思います

    nullになってるオブジェクトを特定したうえで、そのオブジェクトがnullになってるのが正しい動作ならば

    If とあるオブジェクト IsNot Nothing Then
    ……
    End If

    みたいに条件を追加すれば良いです
記事No.98576 のレス /過去ログ171より / 関連記事表示
削除チェック/

■98584  Re[4]: メディアプレイヤーでClearした時にエラーが出ます。
□投稿者/ くま -(2021/12/05(Sun) 18:49:27)
    ロッテモナ王 さん 失礼しまいた。
    回答が被ってしまって申し訳ないです。
記事No.98576 のレス /過去ログ171より / 関連記事表示
削除チェック/

■98585  Re[5]: メディアプレイヤーでClearした時にエラーが出ます。
□投稿者/ ロッテモナ王 -(2021/12/05(Sun) 19:17:22)
    全然かまわないですよ、みんなであーでもないこーでもないと言うのが掲示板の醍醐味だったりするじゃないですか
記事No.98576 のレス /過去ログ171より / 関連記事表示
削除チェック/

■98586  Re[6]: メディアプレイヤーでClearした時にエラーが出ます。
□投稿者/ アン -(2021/12/05(Sun) 19:58:13)
    No98585 (ロッテモナ王 さん) に返信
    くまさん、ロッテモナ王さん

    指示通り修正した所エラーも無くなりました。

    解決しましたので、ありがとうございました。
記事No.98576 のレス / END /過去ログ171より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -