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

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

C# と VB.NET の入門サイト

Re[6]: Applet.newAudioClip(getClass(の


(過去ログ 134 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■79302 / inTopicNo.1)  Applet.newAudioClip(getClass(の
  
□投稿者/ はてな (1回)-(2016/03/20(Sun) 23:19:44)

分類:[Java] 

今晩は、宜しくお願いします。

下のような簡単なコードを書いてやりましたが、
#clip = Applet.newAudioClip( getClass().getResource( "../1-1.wav" ) ) ;
の箇所でエラーが出てしまいます。

全く原因がわかりません。

//clip = Applet.newAudioClip( getClass().getResource( "../1-1.wav" ) ) ;
とコメントアウトにすると、エラーは出ません。

全体の考え方(Applet.newAudioClip( getClass().getResource( "../1-1.wav" ) ) ;
の呼び出し方等)に間違いがあるのでしょうか。

どうか宜しくご教示お願い致します。

=========================================================================
public class SoundSample extends JFrame
{
	java.applet.AudioClip clip ;

	public SoundSample()
	{
		//音源の読み込み
		clip = Applet.newAudioClip( getClass().getResource( "../1-1.wav" ) ) ;
		clip.play() ;

		//フレーム設定
		this.setSize( 300 , 200 ) ;
  		this.setTitle( "ボタンイベント" ) ;
		this.setDefaultCloseOperation( EXIT_ON_CLOSE ) ;
		this.setVisible( true ) ;
	}
	public static void main( String[] args )
	{
		new SoundSample() ;
	}
}
=========================================================================

引用返信 編集キー/
■79310 / inTopicNo.2)  Re[1]: Applet.newAudioClip(getClass(の
□投稿者/ もりお (7回)-(2016/03/21(Mon) 09:41:47)
No79302 (はてな さん) に返信

リソースの取得に失敗しているのですかね。
エラーメッセージは何と出力されていますか?


質問とはおそらく関係ありませんが、Swingのコンポーネントに
アクセスするのは特定のスレッド(イベントディスパッチスレッド)からおねげーしますだー
というのがありまして、こんな感じにするのがよいですよ。

public static void main( String[] args )
{
	SwingUtilities.invokeLater(() -> new SoundSample());
}

引用返信 編集キー/
■79317 / inTopicNo.3)  Re[2]: Applet.newAudioClip(getClass(の
□投稿者/ はてな (2回)-(2016/03/21(Mon) 14:58:18)
もりお さん回答ありがとうございます。

> リソースの取得に失敗しているのですかね。
# リソースの取得に失敗というか、、、、、そもそもこのコードの使い方に問題があるというような・・・・・。

# Eclipseのはいたエラーは以下の内容です、エラーの意味が全く不明です、宜しくお願いします。

==============================================================================
Exception in thread "main" java.lang.NullPointerException
	at sun.applet.AppletAudioClip.<init>(AppletAudioClip.java:65)
	at java.applet.Applet.newAudioClip(Applet.java:313)
	at SoundSample.<init>(SoundSample.java:25)
	at SoundSample.main(SoundSample.java:57)
==============================================================================


> ■No79302 (はてな さん) に返信
> 
> リソースの取得に失敗しているのですかね。
> エラーメッセージは何と出力されていますか?
> 

引用返信 編集キー/
■79319 / inTopicNo.4)  Re[3]: Applet.newAudioClip(getClass(の
□投稿者/ Hongliang (421回)-(2016/03/21(Mon) 15:16:48)
newAudioClipの下は多分そのまま引数を渡しているだけで、つまりはnewAudioClipの引数にnullを渡されたって例外でしょう。
(厳密には、AppletAudioClipのコンストラクタ内で何らかのオブジェクトにアクセスしようとしてnullだったという例外)
で、なぜnullが渡っているかっていうと、getResourceがリソースを見つけられず(あるいはアクセス権がないなどで)nullを返しているからでしょう。
引用返信 編集キー/
■79323 / inTopicNo.5)  Re[4]: Applet.newAudioClip(getClass(の
□投稿者/ はてな (3回)-(2016/03/21(Mon) 16:27:12)
Hongliang さん、回答ありがとうございます。

> newAudioClipの下は多分そのまま引数を渡しているだけで、つまりはnewAudioClipの引数にnullを渡されたって例外でしょう。
> (厳密には、AppletAudioClipのコンストラクタ内で何らかのオブジェクトにアクセスしようとしてnullだったという例外)
> で、なぜnullが渡っているかっていうと、getResourceがリソースを見つけられず(あるいはアクセス権がないなどで)nullを返しているからでしょう。

#↑の意味が全く分りません、下のようにAppletで書き直すと正常に動作します。
最初に書いたコード(アプリケーション)との違いが分りません。

アプリケーションでコードを書く場合にどのように修正すればよいのでしょうか。
宜しくお願いします。

=======================================================

public class SoundSample2 extends Applet
{
	AudioClip clip ;

	public void init()
	{
		//音源の読み込み
		clip = getAudioClip( getCodeBase() ,"../wave_a/1-1.wav" ) ;
		clip.play() ;

		//フレーム設定
		this.setSize( 300 , 200 ) ;
		this.setVisible( true ) ;
	}
}
===================================================================================

引用返信 編集キー/
■79339 / inTopicNo.6)  Re[5]: Applet.newAudioClip(getClass(の
□投稿者/ もりお (8回)-(2016/03/23(Wed) 00:49:59)
No79323 (はてな さん) に返信

> clip = getAudioClip( getCodeBase() ,"../wave_a/1-1.wav" ) ;
> Applet.newAudioClip( getClass().getResource( "../1-1.wav" ) ) ;

ここが違いますよね。
getResourceに"../1-1.wav"を渡しています。
newAudioClipにgetResourceの返り値を渡していますよと。

getResourceはパスが存在しなければnullを返します。
newAudioClipにnullを渡すと当該エラーがでます。

エラーが出ないようにするには、newAudioClipにnullを渡さないようにする必要があります。
newAudioClipにnullを渡さないようにするには、getResourceに存在するパスを渡す必要があります。

getResource( "../1-1.wav" )の"../1-1.wav"を修正すればよいです。
どう修正するのがよいのでしょうね。
私なら1-1.wavの親のディレクトリをクラスパスに追加してgetResouceに渡すパスをこうします。
Applet.newAudioClip( getClass().getResource( "/1-1.wav" ) ) ;
引用返信 編集キー/
■79345 / inTopicNo.7)  Re[6]: Applet.newAudioClip(getClass(の
□投稿者/ いろは (5回)-(2016/03/23(Wed) 11:42:20)
もりおさん、回答有り難うございます。

早速試したところうまく動作しました、本当に有り難う御座います。
今後ともよろしくお願いいたします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -