0

文字列があり、すべてのクラスで利用できるようにしたいと考えています。すべてのクラスは文字列を変更でき、文字列を再度使用しても変更は文字列に残ります。私には 3 つのアクション リスナーがあり、すべてのアクション リスナーで文字列を変更し、変更を維持したいと考えています。変更された文字列をファイルに書き込みたいのですが、これはメイン メソッドで行われます。文字列をクラスで使用できるようにし、クラスによって行われた変更を保持するにはどうすればよいですか? 私はこれを試しました-

public class BasicGuiOnlyText {    
  static String outputHtml="";  
  //Rest code of the class }   
  mnuItemNew.addActionListener(new ActionListener() {    
    public void actionPerformed(ActionEvent e) {    
    outputHtml+="<html>";  
  }  
}  
public static void main(String args[]){  
  BasicGuiOnlyText gui = new BasicGuiOnlyText();  
  OutputStream htmlfile= new FileOutputStream(new File("test.html"));//For the creation of HTML file  
  PrintStream printhtml = new PrintStream(htmlfile);
  printhtml.println(outputHtml);  
}  

しかし、これは機能していません。actionlistener クラスでは使用できません。actionlistener クラスで別の文字列を使用して ststic であると宣言すると、その文字列はメイン クラスで使用できなくなります。

4

3 に答える 3

0

単一のクラスローダーがあると仮定すると、

public Class Classname {
    public static STRING_NAME = String 
   ...

Classname.STRING_NAME として任意のクラスで公開されます

ただし、文字列をファイルに保持するには、現在の値を取得および設定するメソッドを備えた専用のシングルトン クラスを定義することをお勧めします。put の背後では値をファイルに書き出すコードがあり、get value の背後ではファイルから現在の値を読み取ります。

アプリケーションが複数のスレッドを使用している場合は、読み取り/書き込み操作を同期する必要がある場合もあります。

何かのようなもの

public class StringValue {
    private static StringValue instance = new StringValue();

    private StringValue() { 
       ... constructor 
    }

    public static StringValue getInstance() {
        return instance;
    }

    public synchronized void putValue(String newValue) {
        write to file...
    }

    public synchronized String getValue() {
        read the file ...
    }
}

同期にパフォーマンスの問題がある場合は、現在の値をキャッシュしてさらに進めることができます。

クライアントコードは次のようになります

String currentValue = StringValue.getInstance().getValue();

StringValue.getInstance().putValue("NewValue");
于 2012-08-07T06:52:33.850 に答える
0

String を公開し、静的インポートを使用して ActionListener にインポートするか、クラスをインポートして参照を使用しますBasicGuiOnlyText.outputHtml

変数が存在するクラスの名前空間を指定しない限り、JVM は変数を解決できないことに注意してください。

于 2012-08-07T06:53:29.683 に答える
0

文字列だけの場合は、 のようなものを使用することをお勧めします。ここではProperty fileそこに書き込み、次に読み取ることができます。それでも、これをファイルではなくクラスに入れたい場合は、以下を実行してください。

1.で を作成しclassますpublic static String variable

2.次に、クラス名を使用して別のクラスからこのメソッドを呼び出すだけです。

例えば:

public class Test{

    public static String s;


 }

3.また、マルチスレッドアプリケーションの場合は、synchronization必要になります。

于 2012-08-07T06:55:04.253 に答える