JAVAアプレットでプログラムを作成していまして、FileInputStreamで
取り込んだデータをフレームに表示させたんですが、表示させたフレーム
のボタン(ウィンドウ右上の×ボタンなど)何を押しても終了できないんです。

それで色んな所で探していて、フレームを閉じる処理が見つかったので、
それを追加してみましたが、それもだめです。
これはどのようにすればよろしいのでしょうか?

下記にソースを記述しておきますので、悪い点がございましたら教えてください。

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

class frame extends Frame implements WindowListener
{
Color bgcolor;
Font font;
Label lab_1,lab_2;

frame()
{
super("title");
setLayout(null);

bgcolor = new Color(240,248,255);
setBackground(bgcolor);
setForeground(Color.black);
addWindowListener(this);

font = new Font("Serif",Font.PLAIN,13);

/* Labelを作成 */
lab_1 = new Label();
lab_2 = new Label();

lab_1.setFont(font);
lab_1.setText("TEST1");
lab_1.setBounds(20,20,60,30);
add (lab_1);

lab_2.setFont(font);
lab_2.setText("TEST2");
lab_2.setBounds(80,20,60,30);
add (lab_2);

}
protected void processWindowEvent(WindowEvent endEvent)
{
System.exit(0);
}
}

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

A 回答 (3件)

とりあえず、コンパイルエラーが出ませんか?


インターフェイスをimplementsしてあるので、
インターフェイスのなかで定義されているメソッドはすべて定義しなくてはなりません。

具体的には下記のものです。
void windowActivated(WindowEvent e)
ウィンドウがユーザのアクティブウィンドウに設定されたときに呼び出されます。
void windowClosed(WindowEvent e)
ウィンドウに対する dispose の呼び出しの結果として、ウィンドウがクローズされたときに呼び出されます。
void windowClosing(WindowEvent e)
ユーザが、ウィンドウのシステムメニューでウィンドウを閉じようとしたときに呼び出されます。
void windowDeactivated(WindowEvent e)
ウィンドウがユーザのアクティブウィンドウではなくなったときに呼び出されます。
void windowDeiconified(WindowEvent e)
ウィンドウが最小化された状態から通常の状態に変更されたときに呼び出されます。
void windowIconified(WindowEvent e)
ウィンドウが通常の状態から最小化された状態に変更されたときに呼び出されます。
void windowOpened(WindowEvent e)
ウィンドウが最初に可視になったときに呼び出されます。

最低「これらのメソッドがない」というメッセージがでるはずです。
~~は abstract として宣言する必要があります。~~を ~~で定義しません。
というエラーがそれです。

implements WindowListener やめて、
addWindowListener(this);
を書き換えて、
protected void processWindowEvent(WindowEvent endEvent)
{
System.exit(0);
}
を消して、下記のようにすると閉じられます。

import java.awt.*;

public class TestgFrame extends Frame
{
 public TestFrame()
 {
 setTitle("ふれーむのタイトルだよーん");
 //以下略

 TestWindowAdapter testWindowAdapter = new TestWindowAdapter();
 this.addWindowListener(testWindowAdapter);
 }

 class TestWindowAdapter extends java.awt.event.WindowAdapter
 {
 public void windowClosing(java.awt.event.WindowEvent event)
  {
   event.getWindow().setVisible(false);//イベントのあったフレーム閉じる
   event.getWindow().dispose();//イベントのあったフレーム破棄
   //System.exit(0); アプレットなのでだめ
  }
 }
}

なお、アプレットという話ですので、System.exit(0);
にしないほうがよいでしょう。

また、コンストラクタの名前はクラス名と同じにします。
さらにクラス名は大文字で始まるのが規則です。
(上の例ではなおしておきました)

あと、失礼ですが、
フレーム閉じるのにMouseListenerは必要ないですよ…。


老婆心。
これらはすべて入門書にかいてありますので、
一冊本を読むことをお勧めします。
    • good
    • 0
この回答へのお礼

御礼が遅くなりましてすいません。
ご丁寧に教えていただいたおかげでうまく行きました。

私も本を読んで何とかがんばっているのですが、もともとCの知識も
ない上、本を見てもなかなか理解できず本当に苦労しています。

本当に助かりました。どうもありがとうございました。

お礼日時:2001/03/10 16:32

エラーの原因はimplementsしているインターフェースのせいだと思います。


私が先にのせましたサンプルソースではimplements MouseListenerとなっていますが、
sr20detkさんのほうではimplements WindowListenerになっています。
WindowListenerをimplementsしているのにMouseListenerのメソッドが書いて
あったりするとエラーが出ると思います。

前回のソースはMouseListenerだったのですが、WindowListenerでよいのですか?
(なかなか上手く説明できなくてすみません・・・)
    • good
    • 0

まず最初にprocessWindowEventはJFrame(swing)のメソッドなのでFrameでは


使用できません。(swingについてわからない場合は調べてみて下さいね。)
なのでイベントを利用します。windowClosingはユーザが、ウィンドウのシステムメニューで
ウィンドウを閉じようとしたときに呼び出されます。
とりあえず私はこんな風にしてみました。

class labelFrame extends Frame implements MouseListener {
Label label;

labelFrame(String title) {
super(title);
setLayout(new FlowLayout());
label = new Label("Hello from Java! This is a frame window.");
add(label);
addMouseListener(this);
//↓ここから↓
this.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(WindowEvent e) {
doWindowClose();
}
});
//↑ここまで↑
}
********(中略)*********

//↓メソッド↓
void doWindowClose(){
this.setVisible(false);
}
//↑メソッド↑

this.setVisible(false);の部分は閉じるのではなく非表示にする意味ですが
前回のソースを見ると切替をsetVisibleでやっていたのでこれにしてみました。

この回答への補足

***********************************************************
frame.java:7: frame は abstract として宣言する必要があります。mouseClicked(jav
a.awt.event.MouseEvent) を frame で定義しません。
class frame extends Frame implements MouseListener
***********************************************************

コンパイル時に上記エラーが出たのですが、内容が理解できず
対処に困っています。
教えていただいた、ソースを記述すると共に、修正しました。中略以外は
(クラス名称の違いを除く)全て同じようなプログラムにはなっています。
他に何かいけない所があるのでしょうか?

補足日時:2001/03/09 18:03
    • good
    • 0

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

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

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

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

Q亀甲牡丹ヒントニーの育て方

1年前くらいに、亀甲牡丹ヒントニー(実生?)の小さい鉢植えを買いました。
お店の人が、肥料などはいらないから水だけ2週間に1回くらいでコップ1杯くらいあげて、と言っていたので、そうしていたのですが、最近になって、葉っぱ?が茶色になってきています(枯れてる?)
夏ぐらいまでは綺麗な緑色だったのですが。
室内の日はあんまりあたらないところに置いてます。
サボテンを育ててるのは初めてで、どうしたらよいのか全く分からないです。

水やりの頻度や量をこうしたらいいとか、肥料はいらないのか、とかアドバイスがあったら教えてください。
今は、まだ直径4センチ、高さ2センチくらいの大きさです。
鉢が買ったときの小さいもの(直径8センチ、高さ10cmくらい)なのですが、植え替えたほうがいいのでしょうか。
また、日なたに置くのと日陰におくのとどちらがいいのでしょうか。

参考になるのかわかりませんが、今朝とった写真をつけました。

Aベストアンサー

誠に残念ですが、画像を見る限り九分九厘枯れています。
一分の望みはあるかも知れませんが、このような状態になってからでは
助けようがありません。元の緑色に戻すのは不可能です。
今後に新たに購入されるかも知れませんので、亀甲牡丹ヒントニーが何
であるかと言うより、サボテンがどんな植物であるのかを説明したいと
思います。これを読めばサボテンと言う植物が分かり、販売店の方が言
われた事が間違いだった事が分かります。

サボテンと言う植物は暑さや乾燥に非常に強く、多湿や寒さには非常に
弱い植物が多いです。一部には寒さにも強い種類もありますが、そのよ
うな種類は世界中に数種類しかありません。
暑さに強いと言うのは、自生地が亜熱帯や砂漠等で自生する物が多いと
言う訳で、長期間も雨が降らないメキシコ等が有名です。
体に水分を蓄えられる機能を持っているため、水遣りを怠っても直ぐに
は枯れる事がありません。蓄えた水分を少しづつ使用し、雨が降るまで
生き延びようとします。蓄えた水にも限りがあるので、全て使い切って
しまうと当然ですが枯れてしまいます。逆に普通の草花のように毎日の
ように水遣りをすると、蓄えられる水分分量を超えますから、根腐れを
起こして腐敗して枯れてしまいます。

どんな植物や樹木でも共通しますが、植替え時期は必ず決められていま
す。何時でも植替えが出来るとは考えないで下さい。決められた時期に
植替えを行うようにし、状態が悪くなってからでは手遅れになります。
亀甲牡丹は通常のサボテンと同じですから、植替えは5~9月の間だけ
で行います。僕の長年の経験からすると、出来るなら梅雨時期と猛暑の
時期を除いた時期が良く、梅雨入り前までに植替えを済ませた方が良く
なります。古い土は全て捨て、新しい土を使用して植替えます。
土は市販のサボテンと多肉植物の土を使用し、何も混ぜないで購入時の
ままで使用しますが、保水性が高い種類が多いので園芸用の川砂を2割
程混ぜても構いません。

肥料は植替え時に緩効性化成肥料(マグァンプK等)を混ぜて使用し、
次回の植替えまで一切与えません。置き肥で与える時は5~9月の間に
2ヶ月に1回で少量与えます。

置き場所は年間を通して日当たりの良い場所に置き、真夏だけは光線に
より本体が焼けて茶色く変色する事があるので、真夏だけは直射日光が
当たらない場所で弱い光線に当てます。冬場は外気温が5℃近くになっ
たら早めに室内に入れ、光線が十分に当たる窓辺で管理をします。
それ以外の時期は全て屋外で管理をします。猫可愛がりをすると外気温
が7℃以上は無いと越冬が出来ないので、寒さに多少でも強くさせるに
は冬以外は屋外で光線に当てるようにします。
植替え期間は鉢の大きさで決めます。7号鉢を基準とし、それ以下なら
年毎に植替えをし、それ以上なら2年毎に植替えをします。

水遣りは4~10月は鉢土が完全に乾いてから、更に1週間経ってから
鉢底から十分に水が流れ出るまで与えます。この時にコップ半分や1杯
等と量を決めたり、2週間と言うような期間を定めるのは絶対に避ける
ようにします。与える時は鉢底から水が流れ出るまで与えるのが原則で
す。店員さんの言われた方法は、機械的水遣りと言い絶対に行っては駄
目な方法です。店員さんはサボテンの事を全く知らない人のようです。
冬場は休眠するので、1ヶ月に1~3回で与えます。出来るだけ乾かし
気味にした方が寒さに強くなるので、出来るだけ水遣りは控えます。

暖房がガンガン効いた部屋ではサボテンの本体が乾燥するので、場合に
よっては干からびてしまいます。暖房器具の放射熱が直に当たらないよ
うにし、湿度不足の時は霧吹きでサボテンの表面に水を噴霧し、乾燥か
ら守る工夫が必要です。冬場でも掃除で窓を開ける事があるはずですが
窓を開けても冷気に長時間も当てないようにします。サボテンでも風邪
を引く事を覚えて下さい。

画像を見ると鉢の大きさが大き過ぎます。画像のような深鉢が好ましい
のですが、大きな鉢に小さなサボテンが置いてあるような感じを受けま
す。実際にはサボテンと鉢の間が、人挿し指が1本入る程度が適してい
ます。現在の鉢では生育のためには好ましいとは言えません。

日向と日陰ですが、基本的には日向です。植替え直後や状態が悪い時は
明るい日陰に置くのが好ましいですが、基本的には年間を通して日向に
置くようにします。また日向であれば良いと言う事はなく、風通しが悪
いと病害虫の発生が多くなったり、土が乾きにくくなるため腐敗しやす
くなります。年間を通して風通しを良くする事は必ず必要です。

サボテンと多肉植物に関しては栽培経験が長いので、ある程度の事なら
回答が出来ます。他に質問があれば締め切らずに補足質問をして貰えれ
ば、分かる範囲で答えようと思います。

誠に残念ですが、画像を見る限り九分九厘枯れています。
一分の望みはあるかも知れませんが、このような状態になってからでは
助けようがありません。元の緑色に戻すのは不可能です。
今後に新たに購入されるかも知れませんので、亀甲牡丹ヒントニーが何
であるかと言うより、サボテンがどんな植物であるのかを説明したいと
思います。これを読めばサボテンと言う植物が分かり、販売店の方が言
われた事が間違いだった事が分かります。

サボテンと言う植物は暑さや乾燥に非常に強く、多湿や寒さには非常に
弱い植...続きを読む

Qimportするには java.io.*; import org.apache.log4j.*;

EclipseでJavaの開発をしています。
import java.io.*;
import org.apache.log4j.*;
がエラーになります。
多分ライブラリーに入れる必要があるのだと思いますが、その方法について
教えて下さい。宜しくお願い致します。

Aベストアンサー

プロジェクトフォルダを右クリック→「ビルド・パス」→「ビルド・パスの構成」
あるいはプロジェクトフォルダを右クリック→「プロパティ」→「Javaのビルド・パス」

で、ライブラリがプロジェクトフォルダ配下に存在しているなら「Jarの追加」
プロジェクトフォルダ以外の場所にあるなら「外部Jarの追加」で追加できます。

ちなみにjava.ioはJ2SEに含まれているので(「JREシステムライブラリ」があるはずなので)
追加しなくても良いです。

Q多肉植物の育て方

最近、多肉植物に興味を持って、いくつか苗を購入しました。
虹の玉、レズリー、月兎耳、白牡丹、熊童子を買ったのですが、育て方でよくわからないことがあるので教えてください。

まず、置き場所なんですが、本当は室内に置きたいんですが、日光がたくさん必要だと書いてあったので、朝から夕方までは南側の庭に出して、夕方になったら部屋に戻したいと思っているのですが、毎日植物を動かすのはよくないでしょうか?小さな鉢に入れているので、出し入れは問題ないのですが、植物は今いる場所に適応しようとするから、あまり動かすのはよくないと聞いて困っています。

外で育てるのが一番だとは思いますが、どうしても部屋に飾りたいので、日が沈んだ後だけでも室内に置きたいのですが、そういう育て方をしている方はいらっしゃるでしょうか?

あと、植え込み後のお水は、植え込み後すぐにあげたほうがいいのでしょうか?調べてみたところ、少しあげたほうがいいという意見と、植え込み時は乾いた状態で、1週間後くらいにあげたほうがいいという意見があり、どっちにすればいいのかわかりません。今日植え込みをして、念のためまだお水はあげてない乾いた状態にしています。多肉植物は初めてなので、いろいろ戸惑っていますが、長くきれいに育てたいので、詳しい方、育てているかたのアドバイスをお願いします。


長文、読んでいただいてありがとうございました。

最近、多肉植物に興味を持って、いくつか苗を購入しました。
虹の玉、レズリー、月兎耳、白牡丹、熊童子を買ったのですが、育て方でよくわからないことがあるので教えてください。

まず、置き場所なんですが、本当は室内に置きたいんですが、日光がたくさん必要だと書いてあったので、朝から夕方までは南側の庭に出して、夕方になったら部屋に戻したいと思っているのですが、毎日植物を動かすのはよくないでしょうか?小さな鉢に入れているので、出し入れは問題ないのですが、植物は今いる場所に適応しようとする...続きを読む

Aベストアンサー

日暮れ後、室内に取り込むのは悪くないですよ。
多肉植物は結露すると葉が腐ってくるので、寒い時期は室内に取り込む方が無難ですし。

ちなみに私はカフェカーテンをつけた出窓(室内側)に置いています。カーテンの下側から直射日光を浴びて元気に育ってます。結露する頃には夕方少し室内側に移動させるだけなので楽させてもらってます。

あと購入は苗の形なんですよね。苗の形になっているものは土が乾いていれば水あげて大丈夫です。
挿し芽をして増やす時はすぐ水をあげると腐ってしまう場合があるので、しばらく水をあげない方が良いですよ。

多肉植物は多少育てるのに失敗しても挿し芽で何回も復活してくれるし、姿が乱れたら仕立て直しも簡単なので安心して育てて下さい。ずぼらな私でも何年も育てられているので大丈夫です。

Q【AWT】別ウィンドウのLabel設定変更

はじめまして。tokushellと申します。

Javaを始めたばかりですが、学校の課題でAWTを用いて、アプリケーションをつくってます。

実行し、同時に2つのウインドウ(A・B)を表示している状態で、
Aウインドウ内のButton押すとBウインドウのLabelのTextが変更される。

ということがしたいです。

どうすれば別ウィンドウの設定を変えることができるのでしょうか?

よろしくお願い致します。

Aベストアンサー

こんな感じかな??

メインフレームのボタンを押すと、サブフレームのラベルが変わります。

awt出はなく、swingで書いてみました。
後は、自分なりに、改良して、見てください。

public class frameab extends javax.swing.JFrame {
frameb fb;
/** Creates new form frameab */
public frameab() {
fb = new frameb("bb");
fb.setBounds(100, 100, 100, 100);
fb.setVisible(true);
initComponents();
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jButton1 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);

jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
getContentPane().add(jButton1);
jButton1.setBounds(260, 240, 75, 21);

java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-408)/2, (screenSize.height-334)/2, 408, 334);
}// </editor-fold>

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

fb.jl.setText("変わったよ");



// TODO add your handling code here:
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new frameab().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration

}
class frameb extends JFrame{

JLabel jl=null;
frameb(String string){

jl = new JLabel("TEST");

this.add(jl);

jl.setBounds(10, 10, 200, 50);
}

}

こんな感じかな??

メインフレームのボタンを押すと、サブフレームのラベルが変わります。

awt出はなく、swingで書いてみました。
後は、自分なりに、改良して、見てください。

public class frameab extends javax.swing.JFrame {
frameb fb;
/** Creates new form frameab */
public frameab() {
fb = new frameb("bb");
fb.setBounds(100, 100, 100, 100);
fb.setVisible(true);
initComponents();
}

/** This method is called from w...続きを読む

Qサイネリアの育て方

こんにちは。サイネリアを育てるのですが、サイネリアの育て方がわかりません。育て方や育てるコツを教えてくださいお願いします。

Aベストアンサー

サイネリア(シネラリア)の育て方については下記サイトに詳しく載っていますのでご覧下さい。

参考URL:http://www42.tok2.com/home/kengei/shi_00011g.htm

QDisplay.setCurrent((Frame)new MainPanel(this));について

http://allabout.co.jp/internet/java/closeup/CU20070419A/index4.htm

MainPanel(IApplication ap) {
this.iapp = ap;
としていますが、
MainPanel() {
this.iapp = IApplication.getCurrentApp();
これでいいと思います。
大きいプロジェクトをやっていると、後者の方法ではまずくなるのでしょうか?

Aベストアンサー

getCurrentAppを使ってもいいと思いますよ。要するに「どっちが正しい」ということでなくて、これはさまざまな書き方ができる部分ですから、人によってやり方がいろいろある、というだけのことじゃないですか。

URLの記事を見ましたが、これはEclipseのプラグインでプロジェクトを作るとこういうソースコードが自動生成されるみたいですね。それでそのまま使ってるだけじゃないですか。特に深い意味はないように思いました。

Qトリカブトの育て方

山登りに行った時に、トリカブトを見ました。
とても美しく綺麗だったので、育ててみたくなり
トリカブトの種子を購入しました。

購入したのはいいのですが、肝心な育て方がわかりません。
ネットで検索したり、お花に詳しいお友達に聞いたりしても
種子からの育て方がわからないのです。

トリカブト自体を育てるのは始めてなので
詳しい育て方が知りたいと思っています。

トリカブトの育て方に詳しい方がおりましたら
よろしくご回答お願い致します。

Aベストアンサー

育てたことはありませんが手元にある「山野草の育て方&楽しみ方事典」によれば、
・種まきは2月から3月初旬、半日陰で
・用土は赤玉土4に軽石4、腐葉土2を混ぜる
・鉢は中鉢の4-6号
・水やりは芽出しの頃は多めに
・水を好むので夏は腰水で育てる
・置き場所は芽出しから休眠までは木漏れ陽が当たる半日陰
・増殖は活発で3月中旬から4月中旬に塊根を分けて殖やす
・肥料は3月中旬から4月中旬に有機性の固形肥料を与える
・根は猛毒なので手袋をはめ、作業後すぐに手を洗う
・1-2年ごとに植え替える
・露地栽培するなら半日陰で、身近への植栽は避ける
・12月下旬から2月までは休眠する
・休眠期にも土が乾いていたら水は忘れずに与える

育て方はやさしいそうです。

QJava import.text.* とは?

テスト勉強をしています。
以前四則演算のプログラムを作りました


import java.text.*;
import java.io.*;

class _kadai1_sisokuenzan {
public static void main(String[] args) throws Exception{


int a,b,c,d,e,f,g;
double ja,jb,jc,jd,je,jf;
BufferedReader inp=new BufferedReader
(new InputStreamReader(System.in));

となっています。
はじめのimport の宣言2行の意味が全く分かりません。
なぜこのプログラムでこの文が必要なのか、簡単にご説明していただければ幸いです。

Aベストアンサー

こんにちは。

Javaのクラス内で他のパッケージにあるクラスを利用する場合にどのクラスであるかわからない為import宣言にて定義します。

import宣言しなくても以下のようにすれば利用できますがソース大変なことになります。

java.io.BufferedReader inp = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
記述が大変ですのでimportすることにより
BufferedReader inp=new BufferedReader(new InputStreamReader(System.in));
と書くことが出来ています。

import java.io.*;
の場合java.io配下にあるクラス全てが対象になります。
(どんなクラスがあるかはJavaのAPIを見てみて下さい)

質問内のソースのみであれば
import java.io.BufferedReader;
import java.io.InputStreamReader;
の定義があれば動作します。
(import java.text.*は記載されていないどこかで利用されているはずです)

こんにちは。

Javaのクラス内で他のパッケージにあるクラスを利用する場合にどのクラスであるかわからない為import宣言にて定義します。

import宣言しなくても以下のようにすれば利用できますがソース大変なことになります。

java.io.BufferedReader inp = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
記述が大変ですのでimportすることにより
BufferedReader inp=new BufferedReader(new InputStreamReader(System.in));
と書くことが出来ています。

import java.io.*;
の場合ja...続きを読む

Qプレゼントで頂いた観葉植物が枯れてしまいそうです。頂いたものなので名前と育て方が分からず葉が落ち始め

プレゼントで頂いた観葉植物が枯れてしまいそうです。頂いたものなので名前と育て方が分からず葉が落ち始めています。この植物の育て方と名前をご存知の方、助言ください。

Aベストアンサー

サンスベリアの仲間だと思います。結論から言うと枯れる心配はないと思います。

枯れ落ちた葉は葉っぱの新陳代謝で落ちただけで、言うならば葉の寿命を全うしただけです。観葉植物は大きく成長するために古い葉を落として新しい葉を生やします。最近暖かくなってきたので、新しい葉を生やすために古い葉を落とし始めたのだと思いますよ。
写真に写ってる他の葉は元気に見えますので、木の本体はまだまだ元気だと思われます。

育て方ですが、原産地が乾燥地帯なので乾燥に強い種です。寒い時期は水を全くやらなくても良いくらいです。これからの時期は、土の表面が乾いたらたっぷりと水をやり、土が乾くまでは何日も放置でOKです。枯らしてしまう最も多いパターンは水のやり過ぎによる根腐れですので、毎日水をやる必要は全然ありません。窓際に置かれてるようですので日当たりは十分だと思います。

サンスベリアの育て方:
http://sodatekata.net/flowers/page/150.html

Qreturn new ActionForward("xxx.do",true);による画面遷移

tomcat、struts、mysqlで作成したアプリケーションなのですが・・・
画面Aからリンクをクリックし画面Bへいく動作がたまに(頻繁ではありません。)おかしくなります。
画面Aからリンクをクリックすると、画面Bではなく、アプリケーションの一番始めの画面(index.jsp)へとんでしまいます。
おかしくなる条件はつかめていません。

index.jspの中身
response.sendRedirect("./tologin.do");

画面A(A.jsp)のリンク
●<a href="open.do?・・・・"
→open.doによって呼ばれるアクション
 ●ActionA.java
→ActionA.javaにかかれている遷移先
 ●return new ActionForward("next.do",true);
→next.doによって呼ばれるアクション
 ●ActionB.java
→ActionB.javaにかかれている遷移先
 ●return mapping.findForward(SUCCESS);
→画面B(B.jsp)

という流れになっています。
tomcatのログを見ると・・・

*********** 正常なとき ********************
日付 StandardContext[/application]: Mapped to servlet 'jsp' with servlet path '/jsp/A.jsp' and path info 'null'

and update=true
日付 StandardContext[/application]: Mapping contextPath='/application' with requestURI='/application/open.do' and

relativeURI='/open.do'
日付 StandardContext[/application]: Trying exact match
日付 StandardContext[/application]: Trying prefix match
日付 StandardContext[/application]: Trying extension match
日付 StandardContext[/application]: Mapped to servlet 'action' with servlet path '/open.do' and path info 'null'

and update=true
日付 StandardContext[/application]: Mapping contextPath='/application' with requestURI='/application/next.do' and

relativeURI='/next.do'
日付 StandardContext[/application]: Trying exact match
日付 StandardContext[/application]: Trying prefix match
日付 StandardContext[/application]: Trying extension match
日付 StandardContext[/application]: Mapped to servlet 'action' with servlet path '/next.do' and path info 'null'

and update=true
日付 StandardContext[/application]: Mapping contextPath='/application' with requestURI='/application/jsp/B.jsp' and

relativeURI='/jsp/B.jsp'

*********** 異常なとき ********************
日付 StandardContext[/application]: Mapped to servlet 'jsp' with servlet path '/jsp/A.jsp' and path info 'null'

and update=true
日付 StandardContext[/application]: Mapping contextPath='/application' with requestURI='/application/open.do' and

relativeURI='/open.do'
日付 StandardContext[/application]: Trying exact match
日付 StandardContext[/application]: Trying prefix match
日付 StandardContext[/application]: Trying extension match
日付 StandardContext[/application]: Mapped to servlet 'action' with servlet path '/open.do' and path info 'null'

and update=true
日付 StandardContext[/application]: Mapping contextPath='/application' with requestURI='/application/' and

relativeURI='/'
日付 StandardContext[/application]: Trying exact match
日付 StandardContext[/application]: Trying prefix match
日付 StandardContext[/application]: Trying extension match
日付 StandardContext[/application]: Mapped to servlet 'action' with servlet path '/' and path info 'null' and

update=true
日付 StandardContext[/application]: Mapping contextPath='/application' with requestURI='/application/jsp/index.jsp'

and relativeURI='/jsp/index.jsp'

となっていて、パスが抜けてしまっているようです。

何度ログインをし直しても、同じ状態が繰り返され続けました。
tomcatの再起動をしても解消されず、何度か繰り返した後、ログイン画面を呼び出すパス(tologin.do)を手打ちして呼び出されたログイン画面からログインをしたところなぜか正常に戻りました。

return new ActionForward("next.do",true);がいけないのでしょうか?

ちなみにreturn new ActionForward("next.do",true);をreturn new ActionForward("",true);とすると、異常な時と同じようなログが出力されます。

よくわからないのですが、return new ActionForward();で遷移するのと、return mapping.findForward();で遷移するのの違いは何でしょうか?

アドバイスよろしくお願いします。

tomcat、struts、mysqlで作成したアプリケーションなのですが・・・
画面Aからリンクをクリックし画面Bへいく動作がたまに(頻繁ではありません。)おかしくなります。
画面Aからリンクをクリックすると、画面Bではなく、アプリケーションの一番始めの画面(index.jsp)へとんでしまいます。
おかしくなる条件はつかめていません。

index.jspの中身
response.sendRedirect("./tologin.do");

画面A(A.jsp)のリンク
●<a href="open.do?・・・・"
→open.doによって呼ばれるアクション
 ●ActionA.java
→...続きを読む

Aベストアンサー

回答がつかないのでちょっと一言

ActionForwardを生成して遷移させたことが無いのでよくわかりませんが、strutsのjavadocには
「このクラスが既存のアプリケーションが使用している公開されたAPIの一部であるという事実がなければ、 このクラスの使用は推奨されずに org.apache.struts.config.ForwardConfig に置き換えられていたでしょう。」
とあります。
あまり推奨されてないようですので、ActionForwardを使わないという手段は取れないのでしょうか?

参考URL:http://www.jajakarta.org/struts/struts1.1/documentation/ja/target/api/org/apache/struts/action/ActionForward.html


人気Q&Aランキング

おすすめ情報