個人事業主の方必見!確定申告のお悩み解決

次のようなクラスを作成したのですが、表題のようなエラーが出てしまいます。
PrintWriterクラスのcloseメソッドは、
Closableインターフェースのcloseと
witerクラスのcloseと同じ定義だと考えていたので、きっとIOExceptionが発生すると考えていたのですが・・・違うのでしょうか?
Finallyの中にtryを書くと何か問題が起こるのでしょうか?
ソースをそのまま書くのは気が引けるのですが、どうか教えて頂けないでしょうか?
/**
* ファイルに文字を書き込むクラス
*/
class Sample
{
PrintWriter writer; //書き込むためのクラス

public void writerTest()
{
try
{
//** テストファイルに書き込み */
writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream("sample.txt",false),"EUC-JP")));
//書き込みを行います
writer.println("A");
writer.flush();
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
finally
{
try
{
writer.close();
}
catch(IOException ioe) //このcatchでエラーが発生します。
{
System.out.println(ioe.getMessage());
}
}
}
}

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんばんは。


PrintWriterクラスのclose()メソッドはIOExceptionをスローしません。
APIガイドを調べるのが一番の近道かと思います。
Writerクラスのclose()抽象メソッドの実装ですが、例外は無視してるみたいですね。

> Finallyの中にtryを書くと何か問題が起こるのでしょうか?
問題ありません。正しいクローズ処理です。

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java …()
    • good
    • 0
この回答へのお礼

お返事が送れてごめんなさい。

ソースまで確認して、やっと納得がいきました。
少しはJavaの調べ方が解ってきたと思います。
ありがとうございました。

お礼日時:2006/10/31 09:49

ANo.1の付けたしです。


> > Finallyの中にtryを書くと何か問題が起こるのでしょうか?
> 問題ありません。正しいクローズ処理です。
↑close()メソッドが例外をスローする場合は正しい処理です。
PrintWriterクラスの場合は例外をスローしないので正しくありません。
    • good
    • 1
この回答へのお礼

例えば、BufferedWriterの場合には正しいという事ですね。
ちゃんとソースを確認して、納得がいきました。
本当にありがとうございました。

お礼日時:2006/10/31 09:50

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q「例外 *** は対応する try 文の本体ではスローされません。」について。

以下のソースをコンパイルすると,

simulator/showManualPage.java:21: 例外 java.net.URISyntaxException は対応する try 文の本体ではスローされません。
} catch (URISyntaxException ex) {
^
simulator/showManualPage.java:23: 例外 java.io.IOException は対応する try 文の本体ではスローされません。
} catch (IOException ex) {
^

とエラーを返されます。
調べたところ、スローされるはずのない例外をキャッチしようとしている、というエラーだとは分かりましたが、スローは書いているので原因が分かりません。
やり方が悪いのでしょうか?

package simulator;


import java.awt.event.*;
import java.awt.Desktop;

import java.io.IOException;

import java.net.URI;

import java.net.URISyntaxException;



public class showManualPage implements ActionListener {

public void showManualPage() throws URISyntaxException, IOException {
// Get Desktop Object

Desktop desktop = Desktop.getDesktop();


desktop.browse(new URI("http://google.co.jp"));
}

public void actionPerformed(ActionEvent event) {

try {

// Run browser

new showManualPage();

} catch (URISyntaxException ex) {

ex.printStackTrace();

} catch (IOException ex) {

ex.printStackTrace();

}

}

}

以下のソースをコンパイルすると,

simulator/showManualPage.java:21: 例外 java.net.URISyntaxException は対応する try 文の本体ではスローされません。
} catch (URISyntaxException ex) {
^
simulator/showManualPage.java:23: 例外 java.io.IOException は対応する try 文の本体ではスローされません。
} catch (IOException ex) {
^

とエラーを返されます。
調べたところ、スローされるはずのない例外をキャッチしようと...続きを読む

Aベストアンサー

つまり
public void showManualPage() throws URISyntaxException, IOException {
をコンストラクタにするため voidを取り
public showManualPage() throws URISyntaxException, IOException {
とする。(コンストラクタにvoidを付けてはいけません)

参考までに、クラス名は、大文字で始めたほうがわかりやすいです。
つまり3箇所の文字列showManualPageは、すべてShowManualPageに変更しましょう。

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

Qエラーで式の開始が不正ですと出ます。

質問内容 課題
・ファイル student.txt に学生データ(学籍番号、氏名、所属学部)が入っている。
・半角文字で学籍番号を入れて、検索ボタンを押すと、氏名と学部が表示される。

・存在しない学籍番号を入れて、検索ボタンを押すと、「該当なし」が表示される。




・ファイル student.txt の内容。
 学籍番号 氏名 学部の間は半角スペースで区切る。 0521201 金城花子 文学部
0533101 守山春子 生活環境学部
0561101 大森夏子 人間科学部
0552130 名城秋子 現代文化学部
0571201 鶴舞冬子 薬学部

プログラムソース↓
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

class kadai2Frame extends JFrame {
private JTextField tf1,tf2,tf3;
public kadai2Frame() {
setSize(200,100);
addWindowListener(new WindowAdapter() { // ×クリック時の終了処理
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});


Container c=getContentPane();
c.setLayout(new GridLayout(4,2)); // グリッドレイアウト4 行2 列を指定
c.add(new JLabel("学籍番号")); // 最初のラベルを作成して[名前]と表示
c.add(tf1=new JTextField("",8));
c.add(new JLabel("氏名")); // 最初のラベルを作成して[名前]と表示
c.add(tf2=new JTextField("",8));
c.add(new JLabel("学部")); // 次のラベルを作成して[年齢]と表示
c.add(tf3=new JTextField("",8));
JButton bt;
c.add(bt=new JButton("検索")); // ボタンbt を作成して[検索]と表示
bt.addActionListener(new ActionListener() { // ボタンbt のリスナーを登録
public void actionPerformed(ActionEvent e) { // ボタンが押された時

string s6 = tf1.getText();
if(s1.equals(s6)){tf2.setText(str1Ary[1]);

string s6 = tf1.getText();
if(s2.equals(s6)){tf2.setText(str2Ary[1]);



string s6 = tf1.getText();
if(s3.equals(s6)){tf2.setText(str3Ary[1]);




string s6 = tf1.getText();
if(s4.equals(s6)){tf2.setText(str4Ary[1]);



string s6 = tf1.getText();
if(s5.equals(s6)){tf2.setText(str5Ary[1]);


}


public static void main(String[] args) {
JFrame w=new kadai2Frame();
w.setVisible(true);


try{
BufferedReader br =
new BufferedReader(new FileReader("student.txt"));
}
catch (FileNotFoundException e) {


String str1 = br.readLine();
String str2 = br.readLine();
String str3 = br.readLine();
String str4 = br.readLine();
String str5 = br.readLine();

String[] str1Ary = str1.split(" ");
for (int i=0; i<str1Ary.length; i++) {
System.out.println(str1Ary[i]);
}



String[] str2Ary = str2.split(" ");
for (int i=0; i<str2Ary.length; i++) {
System.out.println(str2Ary[i]);
}

String[] str3Ary = str3.split(" ");
for (int i=0; i<str3Ary.length; i++) {
System.out.println(str3Ary[i]);
}

String[] str4Ary = str4.split(" ");
for (int i=0; i<str4Ary.length; i++) {
System.out.println(str4Ary[i]);
}

String[] str5Ary = str5.split(" ");
for (int i=0; i<str5Ary.length; i++) {
System.out.println(str5Ary[i]);
}


String s1 = "str1Ary[0]";
String s6 = "tf1";
String s2 = "str2Ary[0]";
String s3 = "str3Ary[0]";
String s4 = "str4Ary[0]";
String s5 = "str5Ary[0]";

}
}
});
}
}

以上です。誰か教えてください!!(ToT)

質問内容 課題
・ファイル student.txt に学生データ(学籍番号、氏名、所属学部)が入っている。
・半角文字で学籍番号を入れて、検索ボタンを押すと、氏名と学部が表示される。

・存在しない学籍番号を入れて、検索ボタンを押すと、「該当なし」が表示される。




・ファイル student.txt の内容。
 学籍番号 氏名 学部の間は半角スペースで区切る。 0521201 金城花子 文学部
0533101 守山春子 生活環境学部
0561101 大森夏子 人間科学部
0552130 名城秋子 現代文化学部
0571201 鶴舞冬子 薬学...続きを読む

Aベストアンサー

動かないこと前提に。
まず,
if文の構文がおかしいので直します。最後に}をつける

if(s1.equals(s6)){tf2.setText(str1Ary[1]);}
string s6 = tf1.getText();
if(s2.equals(s6)){tf2.setText(str2Ary[1]);}
string s6 = tf1.getText();
if(s3.equals(s6)){tf2.setText(str3Ary[1]);}
string s6 = tf1.getText();
if(s4.equals(s6)){tf2.setText(str4Ary[1]);}
string s6 = tf1.getText();
if(s5.equals(s6)){tf2.setText(str5Ary[1]);}

53行目の閉じ括弧に対応するのは
28行目の括弧です。

つまり public static void mainも
bt.addActionListener(new ActionListener(){ 27行目
}) 111行目
の中に入っているのでしょうが,
おそらくメソッドを二つ入れる形になっているのでエラーがでているんだと思います。

111行目を取り除いて
54行目に
});
を記述します

次に mainの前に
public kadai2Frame() {
を閉じていないことがわかるので
55行目に
}
を補います。
これで応急処置は終わりです。それまでに閉じているはずのものを全然閉じてないからエラーが出ていたんです。

61行目のtry{は64行目
65行目のcatch{はfor文は対応関係が正しいから無視して}109行目。
mainの終了は
110行目。
すると
112行目がクラスの終わりだから
113行目はいらない。

そうすると,シンボルが見つからない云々というエラーだらけになります。

これは,変数の宣言位置とスコープの問題なのでそのエラーとは別に解決してください。

変数宣言をきちんとやれば,コンパイルは通るはずです。
#思い通りには動かないと思うけど。

動かないこと前提に。
まず,
if文の構文がおかしいので直します。最後に}をつける

if(s1.equals(s6)){tf2.setText(str1Ary[1]);}
string s6 = tf1.getText();
if(s2.equals(s6)){tf2.setText(str2Ary[1]);}
string s6 = tf1.getText();
if(s3.equals(s6)){tf2.setText(str3Ary[1]);}
string s6 = tf1.getText();
if(s4.equals(s6)){tf2.setText(str4Ary[1]);}
string s6 = tf1.getText();
if(s5.equals(s6)){tf2.setText(str5Ary[1]);}

53行目の閉じ括弧に対応するのは
28行目の括弧です。

...続きを読む

QJavaで改行などが出来ないのです。

 Java の事で質問です。 
 

 System.out.println("このようにしても\n");

 改行できません。
 
 このようにしても\n   

 と表示されてしまいます。どうしてでしょう。ちなみにOSはMacOS9.1です。なにか関係があるのでしょうか?

Aベストアンサー

> class amigo{
> public static void main(String args[]) {
> System.out.print("aaaaaaaa");
> System.getProperty("line.separator");
> System.out.print("bbbbbbbb");
> }
> }
> のような使い方でしょうか?

String line_sep = System.getProperty("line.separator");
System.out.println("あいうえお" + line_sep + "かきくけこ");

こうです。

Q文字列を日付に変換でParseException

文字列を日付に変換するところで、「ParseException: Unparseable date: "2013/08/06" 
 at java.text.DateFormat.parse(DateFormat.java:335) 」とエラー表示されました。

実際のコーディングは
Date sgndate = new Date();
if(!StringUtil.isNull(rs.getString("sgnymd"))){
String lstdaysgn = rs.getString("sgnymd");
lstdaysgn = lstdaysgn.substring(0,4) + "/" + lstdaysgn.substring(5,7) + "/" +
                              lstdaysgn.substring(8,10);
sgndate = DateFormat.getDateInstance().parse(lstdaysgn); ・・・・・・・・・ここでエラー発生
}

どこが悪いのか解りません。
よろしくご教授ください。

文字列を日付に変換するところで、「ParseException: Unparseable date: "2013/08/06" 
 at java.text.DateFormat.parse(DateFormat.java:335) 」とエラー表示されました。

実際のコーディングは
Date sgndate = new Date();
if(!StringUtil.isNull(rs.getString("sgnymd"))){
String lstdaysgn = rs.getString("sgnymd");
lstdaysgn = lstdaysgn.substring(0,4) + "/" + lstdaysgn.substring(5,7) + "/" +
                              lstdaysgn.substring(...続きを読む

Aベストアンサー

どこが悪いって
DateFormat.getDateInstance().parse(lstdaysgn);
が悪い。実際エラーはそこで起こってるんだし。で、そこの部分について手直しよりも一つ提案があるので聞いてみてくれたまい。

仮にrsがデータベースからSELECT文でデータを取ってきた時のレコードセットであり、かつrs.getString("sgnymd")がyyyyMMdd形式の(スラッシュが付かない)8桁の数字文字列であり、かつ単純にその日付でDate型にしたいだけなのであればこうしたらいいんじゃないか。

Date sgndate = null; // new Date()しない。もちろん後続のルーチンでnullチェックは要るようになる。
if(!StringUtil.isNull(rs.getString("sgnymd"))){
String lstdaysgn = rs.getString("sgnymd");
// ↓これもしない。
// lstdaysgn = lstdaysgn.substring(0,4) + "/" + lstdaysgn.substring(5,7) + "/" +
//                              lstdaysgn.substring(8,10);
sgndate = new SimpleDateFormat("yyyyMMdd").parse(lstdaysgn); // スラッシュつけずに8桁のyyyyMMddでそのままDateにする。
}

以上の手直しにより、このルーチンを通る際にDate 1つとString 7つ、インスタンスの生成を回避する事ができる。これがループで処理されるならなおさら。
仮に、「new SimpleDateFormat("yyyyMMdd")だとパースのたびにSimpleDateFormatのインスタンスが作られちゃうジャン!」と思うならルーチン化していいと思うけど、その場合はスレッドセーフなルーチンにしないといけないのでそこらへん注意の事。

どこが悪いって
DateFormat.getDateInstance().parse(lstdaysgn);
が悪い。実際エラーはそこで起こってるんだし。で、そこの部分について手直しよりも一つ提案があるので聞いてみてくれたまい。

仮にrsがデータベースからSELECT文でデータを取ってきた時のレコードセットであり、かつrs.getString("sgnymd")がyyyyMMdd形式の(スラッシュが付かない)8桁の数字文字列であり、かつ単純にその日付でDate型にしたいだけなのであればこうしたらいいんじゃないか。

Date sgndate = null; // new Date()しない。もちろ...続きを読む

Qフォーム上で押されたボタンによってサーブレットの処理を変えたい

Urizakaです。
さて、さっそく質問です。
JSPの同一フォーム上に「登録」「修正」「削除」のボタンを置き、その押された
ボタンによってサーブレット内での処理が切り替わる(具体的には、違う
SQL文を実行し、違うJSPページをgetRequestDispatcherメソッドで生成
する)ようにしたいのですが、どのようにすればよいのでしょうか?
もちろんそれぞれの処理に対して別々のサーブレットを作り、javaScript
でそれぞれのサーブレットへ飛ぶように制御するという処理も考えたことは
考えたのですが、できれば一つのサーブレットで済ませたいと考えたもので
…宜しくお願いします。

Aベストアンサー

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

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

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=MySubmit>
</form>

<script language="JavaScript">
function func(MyCommand){
document.MyForm.MySubmit.value=MyCommand;
document.MyForm.submit();
}
</script>

■Servletでの処理
// リクエストの取得
String MyAction = req.getParameter("MySubmit");

// 処理の実行
if (MyAction.equals("Toroku")){...}
if (MyAction.equals("Shusei")){...}
if (MyAction.equals("Sakujo")){...}



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

こんな感じでどうでしょうか。
ちなみにこうやって書いておくと、フォームのボタンからじゃなくても
アンカーをクリックすることで同じ効果が出せそうな……

<a href="JavaScript:func('Toroku')">登録</a>

あ、でもまたボロが出そうなのでこの辺で(^_^;)

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

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

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=M...続きを読む

Q自作のクラスファイルがインポート出来ない

ご質問させて頂きます。

自作のクラスファイルがインポート出来ないので困っています。

自作のクラスファイルがある場所
c:\ja

クラスファイル名
TestMap.class

juko.javaにこのようにインポートして、
import TestMap.*;

以下のようにインポートをしようとすると、
C:\ja>javac -d c:\ja juko.java

以下のようなエラーになってしまいます。
-----------------
jukou.java:7: パッケージ TestMap は存在しません。
import TestMap.*;
-----------------

なお、環境設定も以下のように変更してみましたが駄目でした。
CLASSPATH=C:\ja;.;C:\j2sdk1.4.1_02\lib\tools.jar;C:\Program Files\Allaire\JRun\l
ib\ext\servlet.jar;C:\mysql-connector-java-3.1.0\mysql-connector-java-3.1.0-alph
a-bin.jar;

ご教授して頂けたら幸いです。

ご質問させて頂きます。

自作のクラスファイルがインポート出来ないので困っています。

自作のクラスファイルがある場所
c:\ja

クラスファイル名
TestMap.class

juko.javaにこのようにインポートして、
import TestMap.*;

以下のようにインポートをしようとすると、
C:\ja>javac -d c:\ja juko.java

以下のようなエラーになってしまいます。
-----------------
jukou.java:7: パッケージ TestMap は存在しません。
import TestMap.*;
---------------...続きを読む

Aベストアンサー

おお
そこまでいったってことはimportについては解決したようですね。


TestMap("B") ;
は参照になっていません。
クラス名("B")はコンストラクタにStringの"B"を渡しているということになっているからです。

試しにTestMapクラスに
public String getStr(){
return "呼ばれてますよ!"
}
を追加してみてください。

これで"呼ばれてますよ!"がとれれば大丈夫!!

QArrayListの使い方がわかりません。(超初心者です。)

情報管理用のクラス[Hito]を作成する。
プロパティ
 String name
double taijyu
double sincho
double nenrei

・メインクラスでHitoをArrayListに5つ格納し、それぞれの値を表示させるという課題に挑んでいます。

2週間前からjavaを勉強し始めたばかりで、ようやくオブジェクト指向や、クラスというものどんなものか多少イメージがわいてきた程度です。ArrayListについては配列と違い、格納するデータ数の数をはじめから決めなくてもいいというぐらいしかわかっていません。(これでさえ違うかも?)

 どのように組みはじめばいいか、そしてArrayListはどのように使えばいいのか教えていただけますか? よろしくお願いします。

Aベストアンサー

ほかの方の説明で理解を深めたら、以下のコーディングを打ち込んでコンパイルします。
C:\java\OKWeb>javac TestHito.java
成功したら、

C:\java\OKWeb>java TestHito
で実行してみてください。
C:\java\OKWeb>java TestHito
名前 あきら 体重 74.3 身長 184.3 年齢 35
名前 まみ 体重 44.5 身長 168.4 年齢 28

と表示されます。
先ず動く事で感動を得る事が大切だと思います。
import java.util.*;

class Hito {
private String name;
private double taijyu;
private double sincho;
private int nenrei;

public Hito(){
name="";
taijyu=0;
sincho=0;
nenrei=0;
}

public void setName(String name){
this.name = name;
}
public void setTaijyu(double taijyu){
this.taijyu = taijyu;
}
public void setSincho(double sincho){
this.sincho = sincho;
}
public void setNenrei(int nenrei){
this.nenrei = nenrei;
}
public String getName(){
return name;
}
public double getTaijyu(){
return taijyu;
}

public double getSincho(){
return sincho;
}
public int getNenrei(){
return nenrei;
}
}

public class TestHito{


public static void main(String []args){
Hito[] hito =new Hito[5];
for(int i = 0; i < 5; i++){
hito[i] = new Hito();
}
hito[0].setName("あきら");
hito[1].setName("まみ");
hito[0].setTaijyu(74.3);
hito[1].setTaijyu(44.5);
hito[0].setSincho(184.3);
hito[1].setSincho(168.4);
hito[0].setNenrei(35);
hito[1].setNenrei(28);
ArrayList result = new ArrayList();
result.add(hito[0]);
result.add(hito[1]);
for(int i = 0; i<result.size(); i++){
hito[i]=(Hito)result.get(i);
System.out.println("名前 "+hito[i].getName()+
" 体重 "+hito[i].getTaijyu()+
" 身長 "+hito[i].getSincho()+
" 年齢 "+hito[i].getNenrei());
}

}
}

ほかの方の説明で理解を深めたら、以下のコーディングを打ち込んでコンパイルします。
C:\java\OKWeb>javac TestHito.java
成功したら、

C:\java\OKWeb>java TestHito
で実行してみてください。
C:\java\OKWeb>java TestHito
名前 あきら 体重 74.3 身長 184.3 年齢 35
名前 まみ 体重 44.5 身長 168.4 年齢 28

と表示されます。
先ず動く事で感動を得る事が大切だと思います。
import java.util.*;

class Hito {
private String name;
private double taijyu;
private double sincho;
...続きを読む


人気Q&Aランキング