2008年8月31日日曜日

ADCメンバー登録エラー

ADCのメンバー登録を行っていたところ、プロフィール登録で、
Please correct the errors marked below.
Please provide a shipping address.
というエラーが出た。

これは住所欄の書き方が間違っていたためだった。
住所欄の先頭には番地(数値)がないとこのエラーになるらしい。

2008年8月25日月曜日

テキストのエンコード設定

パッケージエクスプローラ上で、対象のプロジェクトを右クリックしプロパティを開く。
リソースカテゴリの"テキストファイルエンコード"で、エンコードの設定が可能。
"その他"を選択してリストボックスから目的のエンコードを選択する。
※リストボックスにあるものを選択するだけでなく、"EUC-JP"や"sjis"など直接タイプして指定することもできる!

2008年7月21日月曜日

P903iでのみMediaImage#use()で例外発生

P903iでのみMediaImage#use()でUIException(status=NO_RESOURCES)が発生する。

原因は画像ファイルのサイズ(横幅)が大きすぎたことらしい。
画像のサイズ576x32を、288x64にしたら例外が発生しなくなった。

2008年6月2日月曜日

Tomcatが起動しない

下記のようなログを出して起動に失敗する。
----------------------------------------------------------------
[2008-05-31 21:54:17] [info] Procrun (2.0.3.0) started
[2008-05-31 21:54:17] [info] Running Service...
[2008-05-31 21:54:17] [info] Starting service...
[2008-05-31 21:54:17] [174 javajni.c] [error] 指定されたモジュールが見つかりません。
[2008-05-31 21:54:17] [986 prunsrv.c] [error] Failed creating java C:\Program Files\Java\jre1.6.0_06\bin\client\jvm.dll
----------------------------------------------------------------

これはJDK6の場合に起こる症状らしい。
JDK内にあるmsvcr71.dllというファイルを、C:\WINDOWS\system32にコピーしてやると、回避できる。

2008年5月29日木曜日

お客様の端末からはご利用になれません

JSPファイル内でコンテンツタイプをXHTML(”text/xhtml”)として指定したところ、SoftBank端末で下記エラーが出てページを表示できなくなってしまった。
----------------------------------------------------------------
お客様の端末からはご利用になれません。(WJ46042E)
----------------------------------------------------------------

DrawArea の値が不正です

iアプリエミュレータの端末設定で、画面サイズを240x240から240x260に設定し、ADFにもDrawArea属性を追加して、eclipseからエミュレータを実行したが、"DrawArea の値が不正です"というエラーが出てアプリを起動できない。

原因は、eclipseの実行ダイアログで端末を選択していないことだった。

2008年5月28日水曜日

AuthenticationFailedException

JavaMailでGmailを使ってメール送信を行っていたところ、ある日突然下記例外が発生するようになった。(Transport#connect()で発生した模様)

----------------------------------------------------------------
javax.mail.AuthenticationFailedException
at javax.mail.Service.connect(Service.java:319)
at javax.mail.Service.connect(Service.java:169)
----------------------------------------------------------------

詳細は不明だが、原因は使用していたGmailアカウントが無効になっていたことだった。

PCから使用していたGamilアカウントでログインしようとしたところ、"アカウントが無効になりした"と表示された。
この画面のヘルプリンクのようなものをたどっていきそのアカウントで再ログインしたところログインできた(メールの送受信もできた)!
この後はJavaMailプログラムでも例外が発生しなくなった!
結局原因は不明…

Gmail側の不具合なのだろうか?下記のように同様の現象にあった方もいるようだ。
http://groups.google.co.jp/group/gmail-troubleshooting-ja/browse_thread/thread/6654969f20012244

2008年5月23日金曜日

midi再生

MEXAエミュレーターで自作midiを再生したところPlayer.realize()で例外が発生した。
----------------------------------------------------------------
javax.microedition.media.MediaException: realize failed.
at com.jblend.media.AbstractHandler.doRealize(+100)
at com.jblend.media.AbstractHandler.realize(+26)
----------------------------------------------------------------
--->コンテンツタイプを間違えていた("application/x-smaf-phrase"を指定していた)。


コンテンツタイプを"audio/mid"にしたがManager.createPlayer()で例外が発生した。
----------------------------------------------------------------
javax.microedition.media.MediaException: createPlayer() failed.
at com.jblend.media.MediaManager.createPlayer(+166)
at javax.microedition.media.Manager.createPlayer(+5)
----------------------------------------------------------------
--->コンテンツタイプを"audio/midi"にしたら鳴った!!!

2008年5月21日水曜日

MEXAエミュレータメモ

[通信許可設定の変更]
1.MEXAエミュレータを起動する
2.プロジェクト(*.vjpファイル)を開く
3.電源ボタンを押しスタンバイにする
4.決定ボタンを押し管理画面に移行する
5.Settingを選択する
6.アプリを選択する
7."Change Permission ?"でYesを選択
8.Use Networkを選択し通信許可設定を変更する

2008年5月19日月曜日

JSPコードの解析エラー?

下記の例外が発生した。
----------------------------------------------------------------
org.apache.jasper.JasperException: /message.jsp(19,2) The content of elements must consist of well-formed character data or markup.
----------------------------------------------------------------

これはXML形式で記述したJSPファイル内で、タグの整合性が取れていなかったために発生した模様。
XML形式で記述する場合は、<% ... %>のようなスクリプトレットは記述できない。
JSPタグの<jsp:scriptlet>...</jsp:scriptlet>を使用しなければならない。

2008年5月18日日曜日

JavaMailメモ

管理ビーンの初期化部分でコケタ。
------------------------------------------------------------------------------
HTTPステータス 500 -

type 例外レポート

メッセージ

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外

javax.servlet.ServletException: An exception occurred processing JSP page /preregi.jsp at line 23
------------------------------------------------------------------------------

tomcatログにも
java.lang.ClassNotFoundException: javax.mail.Message
が出ていた。

eclipseのプロジェクト設定で、ライブラリを追加し、WARファイル内にも配置されるように設定したら、例外は出なくなった。

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

メール送信で例外が発生した模様。peerからリセットされた?
------------------------------------------------------------------------------
javax.mail.MessagingException: Can't send command to SMTP host;
nested exception is:
java.net.SocketException: Connection reset by peer: socket write error
at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1564)
at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1551)
at com.sun.mail.smtp.SMTPTransport.close(SMTPTransport.java:696)
at javax.mail.Transport.send0(Transport.java:191)
at javax.mail.Transport.send(Transport.java:118)
at srpgweb.Preregistration.preregister(Preregistration.java:314)
------------------------------------------------------------------------------

原因はFromヘッダを付けていなかったため。送信元を明記してないメールははじかれる模様。

JavaMail(+Gmail)でメール送信

Javaプログラムからメール送信を行うためのライブラリJavaMailを使用する。
下記のライブラリファイルが必要になるので、ダウンロードしてプロジェクトに追加する。

JavaMail(mail.jar)
http://java.sun.com/products/javamail/downloads/index.html
JAF(activation.jar)
http://java.sun.com/javase/technologies/desktop/javabeans/jaf/downloads/index.html


実際のプログラムでは下記のように使用すれば良いらしい。
-----------------------------------------------------------------------------

/**
* SMTPメール送信
*
* @param serverUrl サーバーURL
* @param name メールアカウント名
* @param password メールパスワード
* @param smtpProps SMTPプロパティ
* @param toAddr 宛先アドレス
* @param fromAddr 送信元アドレス
* @param fromName 送信元表示名
* @param subject メールタイトル
* @param bodyText メール本文
* @throws Exception
*/
private void sendSmtpMail(
String serverUrl,
String name,
String password,
Properties smtpProps,
String toAddr,
String fromAddr,
String fromName,
String subject,
String bodyText )
throws Exception
{
// セッション
Session session = Session.getDefaultInstance(smtpProps, null);

// 送信メッセージ
MimeMessage mimeMsg = new MimeMessage(session);
mimeMsg.setRecipients(
Message.RecipientType.TO, toAddr);
mimeMsg.setFrom(
new InternetAddress(fromAddr, fromName));
mimeMsg.setSubject(subject, "ISO-2022-JP");
mimeMsg.setText(bodyText, "ISO-2022-JP");

// メール送信
Transport transport = null;
try
{
transport = session.getTransport("smtp");
transport.connect(serverUrl, name, password);
transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
}
catch(Exception e)
{
throw e;
}
finally
{
if(transport != null)
{
transport.close();
}
}
}

-----------------------------------------------------------------------------

上記メソッドの呼び出し方(Gmailの場合)
-----------------------------------------------------------------------------

String smtpServer = "smtp.gmail.com";
String gmailAddr = "????@gmail.com";
Properties props = new Properties();
props.put("mail.smtp.host", smtpServer);
props.put("mail.smtp.auth", "true" );
props.put("mail.smtp.port", "587");
props.put("mail.smtp.starttls.enable", "true");

sendSmtpMail(
smtpServer,
gmailAddr,
"パスワード",
props,
"宛先アドレス",
gmailAddr,
"送信者名",
"タイトル",
"コンニチハ" );

-----------------------------------------------------------------------------
Gmail設定仕様のためこのようなプロパティ設定が必要になる。

2008年5月16日金曜日

JavaScriptをオフにしたら画面遷移しなくなった!?

JavaScriptを出力しないようにしたところ、画面遷移が行われなくなってしまった。

試しに<h:commandLink>の代わりに<h:commandButton>を使ったら画面遷移した!
<h:commandLink>はJavaScriptを使わないと機能しないのか!?

スクリプトレスにする

Apache MyFacesでJavaScriptを出力させないようにするには、web.xmlファイルの内に下記定義を追記する。
----------------------------------------------------------------
<context-param>
<param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
<param-value>false</param-value>
</context-param>

2008年5月15日木曜日

コンポーネントアクションで例外発生?

作成したJSFアプリでコンポーネントアクション(この時はのaction属性で指定したBeanのメソッド)を実行したときに、下記例外が発生した。
----------------------------------------------------------------
HTTPステータス 500 -

type 例外レポート

メッセージ

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外

javax.servlet.ServletException: Error calling action method of component with id _idJsp0:_idJsp10
javax.faces.webapp.FacesServlet.service(FacesServlet.java:154)

原因

javax.faces.FacesException: Error calling action method of component with id _idJsp0:_idJsp10
org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:425)
org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)
org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
----------------------------------------------------------------

原因はBeanクラス内のコンポーネントクラスメンバにインスタンスをセットしていなかったことだった。(アクションメソッド内でインスタンスがセットされていないメンバを参照したためnull例外状態になっていた模様。)
NullPointerExceptionで示してくれればわかりやすいのだが…。

iモードシミュレータでローカルアクセス

iモードHTMLシミュレータⅡでローカルホストへアクセスする際は、"localhost"ではなく"127.0.0.1"を使う。("localhost"だと"接続できません"と表示される。)

×:http://localhost/test.html
○:http://127.0.0.1/test.html

JSFアプリが動作しない

JSF11TestというJSFアプリをつくりその中のtest.jspにアクセス(http://localhost:8080/JSF11Test/faces/test.jsp)したが、"HTTPステータス 404 - サーブレット Faces Servlet が利用できません"と表示され、動作しない。
環境は下記のとおり。
eclipse 3.3
Tomcat6
Apache MyFaces 1.1.5

原因は、動的Webプロジェクト(JSF使用)のウィザードのJSF機能のところで、ライブラリーの配置にチェックを入れていなかったことが原因だった。このためWARファイル内にJSFライブラリーが配置されていなかったため起動できなかった模様。

デフォルトでチェックしてくれればいいと思うのだが…

プロジェクト作成後でも、eclipseメニューのプロジェクトの設定のJ2EEモジュール依存関係のところでJSFライブラリーにチェックを入れれば配置されるようになる。

========================================================
2008-05-15
この症状のときは、
C:\Program Files\Apache Software Foundation\Tomcat 6.0\logs\localhost.2008-xx-xx.log
に下記のようなログが出ることもある模様。
----------------------------------------------------------------
2008/05/15 1:08:10 org.apache.catalina.core.ApplicationContext log
致命的: Error loading WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@1113708
javax.faces.webapp.FacesServlet
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1083)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4364)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:829)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:718)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1215)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
at java.lang.Thread.run(Unknown Source)
----------------------------------------------------------------

2008年5月12日月曜日

文字入力の強制終了

アプリ中で文字入力機能(IME)を使用した際に、バックグラウンドスレッドから強制的に終了できるか調査した。

[Sアプリ環境(MEXAエミュレータ)]
可能(Display.setCurrent()で強制切替可能)。

[iアプリ環境(DoJaエミュレータ)]
不可能。
Canvas.imeOn()中にDisplay.setCurrent()を行ったが切り替わらなかった(例外は発生せずsetCurrent()で処理が中断されている様子)。DoJaの開発ガイドPDFには、imeOn()中にsetCurrent()を行った場合の挙動は機種依存であると記載されている。Panel+TextBoxを使用した場合もsetCurrent()で切り替えられなかった。

したがってiアプリ環境では文字入力の強制終了は使用できない模様。

※ちなみに文字入力起動中において、バックグラウンドスレッドのHTTP通信等は両環境で可能だった。

2008年5月10日土曜日

midi再生

MEXAエミュレーターで拾ってきた野良midiを再生したところ、再生はできたが別の効果音(smaf)との同時再生ができなかった。
("javax.microedition.media.MediaException: start failed."が発生した)

ちなみにmidi同士の同時再生はできた。
midiとsmafの同時再生は不可能ということ?

2008年5月3日土曜日

localhostとの通信

PC上のエミュレーターでiアプリを実行中に、localhostとHTTP通信したい場合は、ADFのPackageURLを下記例のように設定することで通信できる。

PackageURL = http://localhost/test.jar

※設定しないと"SecurityException: Illegal host"が発生して通信できない。

2008年4月27日日曜日

eclipseを起動できない

Eclipse IDE for Java EE(eclipse-jee-europa-winter-win32.zip)をダウンロードして展開後、eclipse.exeを実行したがエラー("JVM Terminated. Exit code=-1")が発生して起動できなかった。

eclipse.ini内の下記の行を削除することで起動できるようになった。
--------------
-vmargs
-Xms40m
-Xmx512m
--------------

これらの行は、メモリ使用量を指定するオプションらしいが、無くても問題ない様子。

========================================================
2008-05-13

日本語化プラグインPleiadesを導入する場合は、上記オプションの削除を行ってはいけないらしい!

上記オプション削除を行っていたところ、Pleiadesが機能しなかった!
(Pleiadesのreadme.txtにも削除するなと書いてあった。)

削除してしまった場合は、Pleiadesに付属しているeclipse.iniサンプルを使ってeclipseを-cleanオプションで起動し直せば、eclipse/Pleiadesが機能するようになる。

========================================================
2008-08-05
削除していけないのは"-vmargs"だけらしい。("-Xms40m"、"-Xmx512m"は削除しないと起動しなかった。)

========================================================
2008-08-15
大きいプログラムのプロジェクトを作ると、eclipseがメモリ不足になって落ちてしまうので、ヒープ拡張オプションを使用する必要が出てきた。
このため"-Xmx256m"を追加した。(512だとeclipseが起動しなかったが、256なら起動した!)
-----------------------------------------
--launcher.XXMaxPermSize
256M
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xmx256m
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
-----------------------------------------

2008年4月26日土曜日

サーバからのデータをうまく読込めない

エミュレーターではサーバから受信したデータを正常に読込めるのに、実機(911SH)だと正常に読込めない。

原因はContent-Typeだった。
Apacheのデフォルト設定では、拡張子などから内容を認識できなかったコンテンツのContent-Typeは"text/plain"にされてしまうらしい。
このデフォルト設定を変えるには、httpd.conf内の下記行を修正すればいい。
---------------------------------------
DefaultType text/plain
---------------------------------------

Content-Typeを"text/plain"から"application/octet-stream"にしてみたところ、正常に読込めた!
作成していたアプリでは受信データがバイナリであるため、"text/plain"にされたことで正常に読込めなくなっていたようだ。

無効なデータのためダウンロードできません

Sアプリとしては実行できたアプリでも、
MIDPアプリとしてビルドしてダウンロードすると、
"無効なデータのためダウンロードできません"
と表示されて実行できない…

2008年3月31日月曜日

JADファイルが保存できない

eclipseでMEXAプロジェクトのJADファイルを編集したが保存されない。(保存しても、再び開いてみると編集が反映されていない。)

パッケージエクスプローラ上でJADファイルをダブルクリックすると、ApplicationDescriptorEditorでJADファイルが開かれてしまうが、このApplicationDescriptorEditorを使って編集していたのが悪いらしい。
どうやらMEXAプロジェクトでは、Sアプリ用のJADエディタ(JadEditor)を使って編集しないと保存されない模様。

2008年3月28日金曜日

apacheのログにユーザーエージェントを出力させる

apacheのアクセスログファイル(C:\xampp\apache\logs\access.log)にクライアントのユーザーエージェントを出力させたい場合は、apache設定ファイル(C:\xampp\apache\conf\httpd.conf)内の、
"CustomLog logs/access.log combined"
の行を有効にすればいい。

HTTP通信のパーミッション設定

SアプリでHTTP通信を行うには、
JADファイルでパーミッション
"MIDlet-Permissions: javax.microedition.io.Connector.http"
を宣言する必要がある。

2008年3月10日月曜日

IISのインストール

コントロールパネル--->プログラムの追加と削除--->Windowsコンポーネントの追加と削除
でインターネットインフォメーションサービス(IIS)をチェックしてインストールする。
途中ファイアーウォールに警告されるので、許可を選択する。
これでインストールは完了。
インストールが完了すればIISは動作し始める。


作成したサイト(http://localhost/WebSite1/mypage_start.aspx)
にアクセスしたら、下記のように言われた。
------------------------------------------------------------------------------
XML ページを表示できません
XSL スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。
[更新] ボタンをクリックするか、または後でやり直してください。


無効な文字で名前が始まりました。リソース 'http://localhost/WebSite1/mypage_start.aspx' の実行エラーです。ライン 1、位置 2

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="mypage_start.aspx.vb" Inherits="_Default" %>
-^
------------------------------------------------------------------------------


同様の現象について下記サイトには、
VisualStudioを入れた後にIISを入れたことが原因
ではないかとの書き込みがあった
http://rararahp.cool.ne.jp/cgi-bin/lng/dotnet/dotnetlng.cgi?print+200605/06050005.txt
------------------------------------------------------------------------------
クレオ 2006/05/11(木) 12:49:02

実は、VisualStudioをインストールした後に、IISをインストールしました。
これが原因でしょうか?

しかし、
http://park16.wakwak.com/~mimi/dotnet/network/install_iis_after_sdk.html
にならって
aspnet_regiis.exeとregsvr32を実行してみたのですが
aspnet_regiis.exeは無事完了。
regsvr32が失敗してしまいます。
以下のエラーがでます。

aspnet_isapi.dllは読み込まれましたが、DllRegisterServerエントリポイントが見つか
りませんでした。このファイルが登録されていない可能性があります。

クレオ 2006/05/12(金) 08:38:39
[[解決]]

今日になってアクセスしてみたら動きました。(?)
なんにも変えてないんですけどね。
OSの再起動が必要だったのでしょうか?
------------------------------------------------------------------------------


とりあえず
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -i
を実行してみたところ、
エラーが下記のように変わった!
------------------------------------------------------------------------------
'/' アプリケーションでサーバー エラーが発生しました。
--------------------------------------------------------------------------------

構成にエラーがあります。
説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下のエラーの詳細を確認し、構成ファイルに変更を加えてください。

パーサー エラー メッセージ: アプリケーション レベルを超えて allowDefinition='MachineToApplication' として登録されているセクションを使うことはできません。このエラーは、仮想ディレクトリが IIS でアプリケーションとして構成されなかった場合に発生します。

ソース エラー:


行 50: を有効にします。
行 51: -->
行 52:
行 53: セクションは、要求の実行中にハンドル


ソース ファイル: c:\inetpub\wwwroot\website1\web.config 行: 52


--------------------------------------------------------------------------------
バージョン情報: Microsoft .NET Framework バージョン:2.0.50727.832; ASP.NET バージョン:2.0.50727.832
------------------------------------------------------------------------------


下記サイトにエラー回避方法(というかサイトの配置手順)があった!
http://www.takebay.net/~daigo-ao/paddlewiki.pl/title_4153502E4E45542054697073.html
------------------------------------------------------------------------------
Webサイトを配置するためには,

* 「ビルド」⇒「Webサイトの発行」で直接パスを指定して配置する
* さらに,IISで公開できるようにするためには,IISの管理画面で,配置したフォルダのプロパティを開き,「ディレクトリ」タブの「アプリケーションの設定」にある「作成」ボタンをクリック.
o そうすると,アイコンが変わる.これをやらないと以下のような意味不明なエラーがでて困ることになる..
------------------------------------------------------------------------------

これでとりあえず、ローカルアクセスなら(http://localhost/WebSite1/以下には)アクセスできるようになった!
しかし携帯からグローバルアドレスだとアクセスできない!
パケットをキャプチャーしたところ、携帯からのアクセス(TCP-SYN:ポート80)に全く反応していない様子。

下記設定にしたらグローバルアドレスでアクセスできた!
コントロールパネルのファイアウォール設定で
・ファイウォール有効の"例外を許可しない"のチェックをはずす
・詳細設定タブの、ネットワーク接続の設定の、myIPサービスを選択して、設定ボタンをして、"Webサーバー(HTTP)"をチェックする。

これでとりあえず動作確認は完了!

XAMPPデモのセキュリティページが表示されない

XAMPPデモのセキュリティページ(http://localhost/security/index.php)が表示されない。

./htdocs/xampp/lang/jp.php
は存在するが、
./security/htdocs/lang/jp.php
は存在しないのが原因。
コピーしてやると解決する。

XAMPP下のページに設定した認証を解除したい

例えば、C:\xampp\htdocs\xampp下のファイルへの認証を解除したい場合は、
C:\xampp\htdocs\xampp\.htaccess内で"AuthType None"とすれば認証が解除される。

ローカルPC上のサーバに接続できない

ローカルPC上のサーバに接続しようとすると下記例外が発生する。
------------------------------------------------------------------------------
java.lang.SecurityException: Disallowed URL by SDF
at javax.microedition.io.Connector.open(+9)
at javax.microedition.io.Connector.open(+6)
at javax.microedition.io.Connector.open(+5)
at myappli.ServerConnector.run(+7)
------------------------------------------------------------------------------

原因は、トラステッド動作設定の通信を許可するURLをADFに設定していなかったため。

SecurityViolation: 34 getLocationProvider 0

LocationProvider.getLocationProvider()をコールすると"SecurityViolation: 34 getLocationProvider 0"と出る。

原因はADF内に"TrustedAPID"の記述がなかったことだった。
iアプリDXではドコモから割り当てられたこのIDが設定されていないとDX機能を使えないらしい。

実機動作時に待ち受け状態(非活性化状態/休眠状態に)に遷移できない

遷移しようとすると
"ソフトに継続動作できない障害が発生しました"
と表示され、アプリが強制終了されてしまう。
また起動時にいきなり活性化状態になっている点もエミュレーターと動作が違う。

原因は、待ち受けアプリとしての起動方法に誤りがあった(通常起動してしまっていた)ことだった。
待ち受け起動するには、待ち受けアプリとして登録してから待ち受け画面に遷移させる必要がある。

SDメモリカードにアクセスできなくなった

実機でアプリを実行しようとしたところ、以前はSDメモリカードにアクセスできていたのに、突如アクセスできなくなった。

原因はPC上でSDカード内のファイルを削除したことだったらしい。
携帯上でSDカードをフォーマットしなおしたらアクセスできるようになった。

エミュレーターで画面が再描画されない

アプリを実行したが、エミュレータの画面が描画されない(操作しても画面が更新されない)。
エミュレータのウィンドウをを最小化&復元すると画面が更新される。
アプリ自体は動作している様子。
また、eclipseを使わずiアプリ開発キット単体でを起動すると"msvcr71.dllがないため起動できない"と言われる。

msvcr71.dllを適当なサイトからダウンロードして、 C:\WINDOWS\system32に配置することで、再描画されるようになった。

作成したアプリを実行できない #2

eclipse+iアプリ開発キットでプロジェクトを作成し、実行してみたが、実行されない。
(エミュレーターが立ち上がってすぐ終了してしまう。)


原因はコンパイラバージョンの設定間違いだった。
1.5から1.4に変更したら実行できるようになった!!!
変更は[プロジェクト]->[プロパティ]->[Javaコンパイラー]->[コンパイラー準拠レベル]で行う。

作成したアプリを実行できない

eclipse+iアプリ開発キットでプロジェクトを作成し、実行してみたが、"Failed create jar"と出て、実行できない。

原因はJDKへのパスが通っていないことらしい。
コントロールパネル→システム→詳細設定→環境変数新規で 、環境変数"PATH "に、";C:\jdk1.3.1_13\bin"(JDKのbinフォルダ) を追記して再起動することで直った。

例外ログを出力できない?

Global.asaxで例外ログを出力するようにしているのだが、例外が発生してもログファイルが生成されない。

VS2005の組み込みサーバで動作時はログファイルが生成されたのだが、公開ページではログファイルが生成されない。

ためしにプログラム先頭でapp_errorlog.txtへ出力するようにしてみたら、
"パス 'C:\app_errorlog.txt' へのアクセスが拒否されました。"
と表示された。

下記のように、Server.MapPathで取得したパスにファイルを作ることはできた。
----------------------------------------------------------------------------
writer = New System.IO.StreamWriter( _
Server.MapPath("~/App_Data") + "/app_errorlog.txt", _
----------------------------------------------------------------------------

2008年2月25日月曜日

OverlayController使用時にConcurrentModificationException発生

MapView+OverlayControllerを使用時、頻繁に画面が更新されていると、ConcurrentModificationExceptionが発生する。

-------------------------------------------------------------------------
W/dalvikvm( 1770): threadid=3: thread exiting with uncaught exception (group=0x4
000fdf8)
E/AndroidRuntime( 1770): Uncaught handler: thread Main exiting due to uncaught e
xception
E/AndroidRuntime( 1770): java.util.ConcurrentModificationException
E/AndroidRuntime( 1770): at java.util.AbstractList$SimpleListIterator.nex
t(AbstractList.java:59)
E/AndroidRuntime( 1770): at com.google.android.maps.OverlayBundle.draw(Ov
erlayBundle.java:36)
E/AndroidRuntime( 1770): at com.google.android.maps.MapView.onDraw(MapVie
w.java:337)
E/AndroidRuntime( 1770): at android.view.View.draw(View.java:4574)
E/AndroidRuntime( 1770): at android.view.ViewGroup.drawChild(ViewGroup.ja
va:1089)
E/AndroidRuntime( 1770): at android.view.ViewGroup.dispatchDraw(ViewGroup
.java:915)
E/AndroidRuntime( 1770): at android.view.View.draw(View.java:4550)
E/AndroidRuntime( 1770): at android.view.ViewGroup.drawChild(ViewGroup.ja
va:1089)
E/AndroidRuntime( 1770): at android.view.ViewGroup.dispatchDraw(ViewGroup
.java:915)
E/AndroidRuntime( 1770): at android.view.View.draw(View.java:4550)
E/AndroidRuntime( 1770): at android.widget.FrameLayout.draw(FrameLayout.j
ava:208)
E/AndroidRuntime( 1770): at android.view.ViewGroup.drawChild(ViewGroup.ja
va:1089)
E/AndroidRuntime( 1770): at android.view.ViewGroup.dispatchDraw(ViewGroup
.java:915)
E/AndroidRuntime( 1770): at android.view.View.draw(View.java:4550)
E/AndroidRuntime( 1770): at android.view.ViewGroup.drawChild(ViewGroup.ja
va:1089)
E/AndroidRuntime( 1770): at android.view.ViewGroup.dispatchDraw(ViewGroup
.java:915)
E/AndroidRuntime( 1770): at android.view.View.draw(View.java:4550)
E/AndroidRuntime( 1770): at android.widget.FrameLayout.draw(FrameLayout.j
ava:208)
E/AndroidRuntime( 1770): at android.view.ViewGroup.drawChild(ViewGroup.ja
va:1089)
E/AndroidRuntime( 1770): at android.view.ViewGroup.dispatchDraw(ViewGroup
.java:915)
E/AndroidRuntime( 1770): at android.view.View.draw(View.java:4578)
E/AndroidRuntime( 1770): at android.widget.FrameLayout.draw(FrameLayout.j
ava:208)
E/AndroidRuntime( 1770): at android.view.ViewRoot.draw(ViewRoot.java:531)

E/AndroidRuntime( 1770): at android.view.ViewRoot.performTraversals(ViewR
oot.java:429)
E/AndroidRuntime( 1770): at android.view.ViewRoot.handleMessage(ViewRoot.
java:584)
E/AndroidRuntime( 1770): at android.os.Handler.dispatchMessage(Handler.ja
va:80)
E/AndroidRuntime( 1770): at android.os.Looper.loop(Looper.java:91)
E/AndroidRuntime( 1770): at android.app.ActivityThread.main(ActivityThrea
d.java:3052)
E/AndroidRuntime( 1770): at java.lang.reflect.Method.invokeNative(Native
Method)
E/AndroidRuntime( 1770): at java.lang.reflect.Method.invoke(Method.java:3
56)
E/AndroidRuntime( 1770): at android.os.ZygoteInit$MethodAndArgsCaller.run
(ZygoteInit.java:1547)
E/AndroidRuntime( 1770): at android.os.ZygoteInit.main(ZygoteInit.java:14
45)
E/AndroidRuntime( 1770): at android.dalvik.NativeStart.main(Native Method
)
-------------------------------------------------------------------------


原因はどうやらAPIの使い方が悪かったことらしい。
画面更新中に、OverlayController#add()/clear()を実行してはいけないようだ。

正しい使い方としては、使用するOverlayオブジェクトは初期化時にadd()しておき、その後はadd()/clear()ではなく、activate()/deactivate()を使用して、Overlayのon/offを行うべきだと思われる。

2008年2月22日金曜日

エミュレータの画面が表示されない

ecllipse+DoJa-5.0開発キットで作成したアプリを実行したところ、エミュレータは起動するが画面が表示されなかった。
また、eclipseを使わず開発キットのみで実行しようとすると「MSVCR71.dllが無いため起動できない」と言われた。

MSVCR71.dllを適当なサイトからダウンロードして、C:\WINDOWS\system32に配置することで、改善された。

2008年2月21日木曜日

緯度経度から情報検索

GPSから取得した緯度経度から、その地点周辺の情報を検索したい。

しかし現状のSDK(ver. m5-rc14)では実現できない。
※android.location.Geocoder#getFromLocation(double latitude, double longitude)
というAPIは存在する。しかし、現状エミュレータ上でこのAPIを使用しても、エミュレータ内のデータベース(/data/misc/location/geodb)を検索するだけらしく、使い物にならない模様。


したがって、使えるWebAPI探して利用するしかない。
候補としては、GeoNames(http://www.geonames.org/)が有力。
このサイトのWebAPIであるfindNearbyWikipediaを使用すれば、緯度経度からその周辺に存在するもののWikipediaエントリー情報を取得できる。
(http://www.geonames.org/export/wikipedia-webservice.html#findNearbyWikipedia)