2010-05-25 4 views
1

에 충돌합니다. 내 JVM이 버전 1.4이고 또한 1.5가 있습니다Java Virtual Machine이 SCO OpenServer 5.0.7 운영 체제를 사용하여

GUI 텍스트 필드에서 0x80 - 0x9f 범위의 문자를 입력하려고하면 JVM이 CPU를 최대 100 %로드하고 중지 할 수있는 유일한 방법은 그것은 jvm 프로세스를 죽이는 것입니다.

자바 콘솔 응용 프로그램에서 같은 범위의 문자를 입력 할 때 괜찮습니다.

나는 콘솔 표준 및 GUI 키 이벤트를 인터뷰하는 방법에 대해 추측하고 있습니다.

누구나 아이디어가 있습니까? 어떻게이 문제를 해결할 수 있습니까?

나는 beleave, 그것은 프로그램의 흐름입니다. 여기에 충돌합니다 STANDART 예입니다

// TextForm.java 

import javax.swing.JPanel; 
import javax.swing.JLabel; 
import javax.swing.JFrame; 
import javax.swing.JButton; 
import javax.swing.JTextField; 

import java.awt.Insets; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.BorderLayout; 
import java.awt.Container; 

import java.awt.event.*; 

public class TextForm extends JPanel { 

    private final JTextField[] tf; 

    // Create a form with the given labels, tooltips, and sizes 
    public TextForm (String[] labels, String[] tips, int[] widths) { 
     tf = new JTextField[labels.length]; 

     setLayout (new GridBagLayout()); 
     final GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.anchor = GridBagConstraints.WEST; 
     gbc.insets = new Insets (3,3,3,3); 

     // Add labels and fields as specified 
     for (int i=0; i<labels.length; i++) { 
     final JLabel l = new JLabel (labels[i]); 

     // Create an accessibility-friendly field 
     tf[i] = new JTextField (widths[i]); 
     tf[i].setToolTipText (tips[i]); // sets accessible desc too! 
     l.setLabelFor (tf[i]);   // sets accessibleName for tf[i]! 

     // lay out label & field 
     gbc.gridy = i; 
     gbc.gridx = 0; 
     add(l, gbc); 
     gbc.gridx = 1; 
     add(tf[i], gbc); 
    } 
    } 

    // Get the contents of one of the TFs. 
    public String getEnteredText(int index) { 
     return tf[index].getText(); 
    } 

    // A simple example program 
    public static void main(String[] args) { 
     final String[] labels = { "First Name", "Middle Initial", "Last Name", "Age" }; 
     final String[] descs = { "First Name","Middle Initial", "Last Name", "Age" }; 

     final int[] widths = { 15, 1, 15, 3 }; 

     final TextForm form = new TextForm(labels, descs, widths); 

     // A button that dumps the field contents 
     final JButton dump = new JButton("Dump"); 
     class DumpListener implements ActionListener { 
     public void actionPerformed(ActionEvent ev) { 
      System.out.println(form.getEnteredText(0)); 
      System.out.println(form.getEnteredText(1)); 
      System.out.println(form.getEnteredText(2)); 
      System.out.println(form.getEnteredText(3)); 
     } 
     } 
     dump.addActionListener (new DumpListener()); 

     final JFrame f = new JFrame("Text Form"); 
    // frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); // Requires Java 1.3 
     final Container c = f.getContentPane(); 
     c.setLayout (new BorderLayout()); 
     c.add(form, BorderLayout.CENTER); 
     c.add(dump, BorderLayout.SOUTH); 
     f.pack(); 
     f.setVisible(true); 
    } 
} 

문제는이, 그 JVM의 키 이벤트가 만들어지는 순간에 충돌, 그래서 내 프로그램 내에서 그것을 debugg 수 없습니다.

+0

JVM이 멈추는 코드를 보려면'jstack'을 사용해보십시오. –

+0

코드를 보지 않고도 도움을주기가 매우 어렵습니다. JVM 결함 일 수도 있고, 버그가있을 수도 있습니다. 문제를 증명하는 짧지 만 완전한 프로그램을 게시 할 수 있다면 도움이 될 것입니다. –

답변

1

Charset 기본값과 관련하여 두 환경간에 불일치가있을 수 있습니다. NetBeans, Eclipse 및 많은 콘솔을 플랫폼 기본값 이외의 다른 것으로 설정할 수 있다는 것을 알았습니다.

System.out.println(System.getProperty("file.encoding")); 
System.out.println(Charset.defaultCharset().name()); 
관련 문제