22

最近、JavaJTextFieldで奇妙な問題が発生しました。次のコード(以下を参照)を実行すると、テキストフィールドに「0」を入力すると、最初に貼り付けアクションが送信され、次に「0」と入力されます。たとえば、「text」をクリップボードにコピーした場合、「0」と入力すると「text0」と入力されます。同様に、「4」と入力すると、前の文字が「4」に置き換えられます(これは削除アクションだと思います。その後、「4」と入力します)。「7」と入力すると、「7」と入力する前にテキストフィールドがクリアされます。

コードは次のとおりです。

import javax.swing.JFrame;
import javax.swing.JTextField;

public class Main {

public static void main(String[] args) {
    JFrame frame = new JFrame();
    JTextField text = new JTextField();
    frame.add(text);
    frame.setSize(500, 500);
    frame.setVisible(true);
}

}

この問題は、Red Hat Linux(Windows XPからVNCを使用してアクセス)で発生しています。すべてがWindowsXPで期待どおりに実行されます。

更新:Ubuntuのプログラムにも問題はありません。また、さまざまなキーボードとVNCビューアを使用してみました。

アップデート2:Javaバージョン

Red Hatの場合:

    java version "1.6.0_17"
    OpenJDK Runtime Environment (IcedTea6 1.7.7) (rhel-1.17.b17.el5-x86_64)
    OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)

XPの場合:

    java version "1.7.0_05"
    Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
    Java HotSpot(TM) Client VM (build 23.1-b03, mixed mode, sharing)

アップデート3:3台の異なるRed Hatマシン(すべて同じグループで作業中)でプログラムを実行し、さらに別のXPコンピューターから実行して再起動してみました。

更新4:今日、私は問題が魔法のように消えたことを見つけるために職場に到着しました。しかし、そもそもなぜそれが起こったのかを知ることは本当に素晴らしいことです。そうすれば、私(そしてこの奇妙な問題に遭遇する多くの人)は将来それを修正する方法を知ることができます。

4

5 に答える 5

1

このコードをプログラムの最初に置いてみてください。

KeyboardFocusManager.setCurrentKeyboardFocusManager(new DefaultKeyboardFocusManager(){
    public boolean dispatchKeyEvent(KeyEvent e) {
        if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_NUMPAD){
            return true;
        }
        return super.dispatchKeyEvent(e);
    }
});
于 2012-07-18T21:03:49.423 に答える
1

よくわかりませんが、助けようとして答えているだけです:

私のIcedTeaの経験は悪いです。何が起こったのか正確には覚えていませんが、当時は公式の Java JRE をインストールすることで問題が解決しました。Id est: Oracle が提供する JRE。

http://java.com/en/download/index.jsp

于 2012-07-20T13:36:02.273 に答える
1

正確な答えを出すのは難しいですが、それは本当に奇妙な現象ではありません. 通常、VNC またはリモート デスクトップ共有が発生すると、1 台のマシンのキーボードとマウスのイベントが別のマシンに送信されます。このマッピングが完了すると、特にクリップボードのコピー、貼り付けで誤った動作が発生する可能性がかなり高くなります。これは Linux の世界だけでなく、Windows の世界でも起こります。

私はこれを自分の経験から言います。私の職場では、XP を実行しているマシンや Windows 7 を実行しているマシンなど、他のマシンに rdc することがよくあります。あるマシンでのクリップボードのコピーとリモート マシンでの貼り付けのアクションは、一部のシステムでは機能し、他のシステムでは失敗します。

Java およびリモート デスクトップ アクセスに関する別の経験を引用すると、Eclipse で Java アプリケーションを実行しています。他のいくつかのマシンから自分のマシンに rdc すると、Eclipse がアプリケーションを完全に起動できないことがわかります。それが機能するには、最初に自分のシステムで起動し、アプリケーションを実行したままにしてから、他のシステムから自分のシステムにrdcする必要があります。

想像してみてください、これが同じファミリーに属することが知られている Windows XP と Windows 7 の場合です。Linux と Windows を VNC と一緒に使用する場合、そのような奇抜なことが起こらないことを願うだけです :)

前述のように、なぜそれが起こっているのかを正確に説明することは困難ですが、これは純粋に OS から OS へのレベルで発生するものであり、Swing フレームワーク レベルでは発生しないと断言できます。

于 2012-07-20T12:18:29.077 に答える
0

これは、VNC の既知の問題のようです。VNCの公式Webサイトによると:

Num Lock キーが同期していない可能性があります。切断し、クライアント コンピューターの Num Lock キーを 1 回押してから、再接続します。

ソース: http://www.realvnc.com/products/viewerplus/known-issues/

これは、VNC の FAQ にも表示されます。

Q. 鍵盤が動かない・鍵盤の動きがおかしい!

これを引き起こす一般的な問題が 1 つあります。Shift、Ctrl、Alt などの修飾キーが押され、ビューアー ウィンドウがフォーカスを失ったり閉じたりすると、「キー リリース」メッセージがビューアーに到達せず、したがってリモート サーバーにも到達しません。リモート マシンは、M が Ctrl-M などであると認識します。たとえば、視聴者はフォーカスを失ったときにさまざまな修飾子を自動的に解放しますが、それでも発生する可能性があり、混乱する可能性があります。解決策は簡単です。スタックしている修飾キーを押して離すだけです。どれかわからない場合は、一度に 1 つずつ試してください。

ソース: http://www-hep.nhn.ou.edu/d0/software/vnc-3.3.2r2/faq.html

この情報があなたの問題を示している場合、問題が「魔法のように消えた」とき、Num Pad はその日に VNC と同期していて、他のものとは同期していなかった可能性があります (もちろん、問題が発生した可能性があることを意味します)。もう一度切り上げます)。

于 2012-07-18T18:28:08.263 に答える
-2

[ターミナル] の [機能] の下にある [アプリケーション キーパッド モードを無効にする] にチェックを入れます。

于 2012-07-16T08:47:07.743 に答える