为什么Java JTextArea 没有接收到整个粘贴的文本?

Why Java JTextArea doesn't receive the entire pasted text?

使用 Netbeans 6.8 (Mac 版) 拖放工具制作 GUI,我设计了一个 JTextArea,用户应该粘贴他的数据,程序将修改并显示给他。

它工作正常;但是,当我尝试在 JTextArea 中粘贴大约 65000 行测试数据时,GUI 只显示其中几行(比如 50 行或更少)......由于某种原因,它拒绝粘贴我复制的整个测试数据来自记事本。

我以为 JTextArea 已满之类的,但是当我尝试手动输入更多文本时(粘贴测试数据后),它正在输入并显示在文本框中!

知道发生了什么吗?

更新 001

我收到以下错误

Java.lang.OutOfMemoryError: Java heap spaces
package bossconverter;



import org.jdesktop.application.Action;

import org.jdesktop.application.ResourceMap;

import org.jdesktop.application.SingleFrameApplication;

import org.jdesktop.application.FrameView;

import org.jdesktop.application.TaskMonitor;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.Timer;

import javax.swing.Icon;

import javax.swing.JDialog;

import javax.swing.JFrame;



/**

* The application's main frame.

*/

public class BOSSConverterView extends FrameView {



public BOSSConverterView(SingleFrameApplication app) {

  super(app);



  initComponents();



  // status bar initialization - message timeout, idle icon and busy animation, etc

  ResourceMap resourceMap = getResourceMap();

  int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");

  messageTimer = new Timer(messageTimeout, new ActionListener() {

    public void actionPerformed(ActionEvent e) {

      statusMessageLabel.setText("");

    }

  });

  messageTimer.setRepeats(false);

  int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");

  for (int i = 0; i < busyIcons.length; i++) {

    busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i +"]");

  }

  busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {

    public void actionPerformed(ActionEvent e) {

      busyIconIndex = (busyIconIndex + 1) % busyIcons.length;

      statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);

    }

  });

  idleIcon = resourceMap.getIcon("StatusBar.idleIcon");

  statusAnimationLabel.setIcon(idleIcon);

  progressBar.setVisible(false);



  // connecting action tasks to status bar via TaskMonitor

  TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());

  taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {

    public void propertyChange(java.beans.PropertyChangeEvent evt) {

      String propertyName = evt.getPropertyName();

      if ("started".equals(propertyName)) {

        if (!busyIconTimer.isRunning()) {

          statusAnimationLabel.setIcon(busyIcons[0]);

          busyIconIndex = 0;

          busyIconTimer.start();

        }

        progressBar.setVisible(true);

        progressBar.setIndeterminate(true);

      } else if ("done".equals(propertyName)) {

        busyIconTimer.stop();

        statusAnimationLabel.setIcon(idleIcon);

        progressBar.setVisible(false);

        progressBar.setValue(0);

      } else if ("message".equals(propertyName)) {

        String text = (String)(evt.getNewValue());

        statusMessageLabel.setText((text == null) ?"" : text);

        messageTimer.restart();

      } else if ("progress".equals(propertyName)) {

        int value = (Integer)(evt.getNewValue());

        progressBar.setVisible(true);

        progressBar.setIndeterminate(false);

        progressBar.setValue(value);

      }

    }

  });

}



@Action

public void showAboutBox() {

  if (aboutBox == null) {

    JFrame mainFrame = BOSSConverterApp.getApplication().getMainFrame();

    aboutBox = new BOSSConverterAboutBox(mainFrame);

    aboutBox.setLocationRelativeTo(mainFrame);

  }

  BOSSConverterApp.getApplication().show(aboutBox);

}



/** 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() {



  mainPanel = new javax.swing.JPanel();

  jScrollPane1 = new javax.swing.JScrollPane();

  jTextArea1 = new javax.swing.JTextArea();

  jScrollPane2 = new javax.swing.JScrollPane();

  jTextArea2 = new javax.swing.JTextArea();

  jButton1 = new javax.swing.JButton();

  menuBar = new javax.swing.JMenuBar();

  javax.swing.JMenu fileMenu = new javax.swing.JMenu();

  javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem();

  javax.swing.JMenu helpMenu = new javax.swing.JMenu();

  javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem();

  statusPanel = new javax.swing.JPanel();

  javax.swing.JSeparator statusPanelSeparator = new javax.swing.JSeparator();

  statusMessageLabel = new javax.swing.JLabel();

  statusAnimationLabel = new javax.swing.JLabel();

  progressBar = new javax.swing.JProgressBar();



  mainPanel.setName("mainPanel"); // NOI18N



  jScrollPane1.setName("jScrollPane1"); // NOI18N



  jTextArea1.setColumns(20);

  jTextArea1.setRows(5);

  jTextArea1.setName("jTextArea1"); // NOI18N

  jScrollPane1.setViewportView(jTextArea1);



  jScrollPane2.setName("jScrollPane2"); // NOI18N



  jTextArea2.setColumns(20);

  jTextArea2.setRows(5);

  jTextArea2.setName("jTextArea2"); // NOI18N

  jScrollPane2.setViewportView(jTextArea2);



  org.jdesktop.application.ResourceMap resourceMap =

        org.jdesktop.application.Application.getInstance

         (bossconverter.BOSSConverterApp.class).getContext()

         .getResourceMap(BOSSConverterView.class);

  jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N

  jButton1.setName("jButton1"); // NOI18N

  jButton1.addMouseListener(new java.awt.event.MouseAdapter() {

    public void mouseClicked(java.awt.event.MouseEvent evt) {

      tester(evt);

    }

  });



  org.jdesktop.layout.GroupLayout mainPanelLayout =

        new org.jdesktop.layout.GroupLayout(mainPanel);

  mainPanel.setLayout(mainPanelLayout);

  mainPanelLayout.setHorizontalGroup(

    mainPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)

    .add(mainPanelLayout.createSequentialGroup()

      .addContainerGap()

      .add(mainPanelLayout.createParallelGroup(org.jdesktop.layout

                          .GroupLayout.LEADING)

        .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

          383, Short.MAX_VALUE)

        .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

          383, Short.MAX_VALUE)

        .add(org.jdesktop.layout.GroupLayout.TRAILING, jButton1))

      .addContainerGap())

  );

  mainPanelLayout.setVerticalGroup(

    mainPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)

    .add(mainPanelLayout.createSequentialGroup()

      .addContainerGap()

      .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

        98, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)

      .add(18, 18, 18)

      .add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

        97, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)

      .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)

      .add(jButton1)

      .addContainerGap(22, Short.MAX_VALUE))

  );



  menuBar.setName("menuBar"); // NOI18N



  fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N

  fileMenu.setName("fileMenu"); // NOI18N



  javax.swing.ActionMap actionMap = org.jdesktop.application.Application

                   .getInstance(bossconverter.BOSSConverterApp

                   .class).getContext().getActionMap

                   (BOSSConverterView.class, this);

  exitMenuItem.setAction(actionMap.get("quit")); // NOI18N

  exitMenuItem.setName("exitMenuItem"); // NOI18N

  fileMenu.add(exitMenuItem);



  menuBar.add(fileMenu);



  helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N

  helpMenu.setName("helpMenu"); // NOI18N



  aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N

  aboutMenuItem.setName("aboutMenuItem"); // NOI18N

  helpMenu.add(aboutMenuItem);



  menuBar.add(helpMenu);



  statusPanel.setName("statusPanel"); // NOI18N



  statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N



  statusMessageLabel.setName("statusMessageLabel"); // NOI18N



  statusAnimationLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);

  statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N



  progressBar.setName("progressBar"); // NOI18N



  org.jdesktop.layout.GroupLayout statusPanelLayout = new org.jdesktop.layout

                            .GroupLayout(statusPanel);

  statusPanel.setLayout(statusPanelLayout);

  statusPanelLayout.setHorizontalGroup(

    statusPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout

                       .LEADING)

    .add(statusPanelSeparator, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

      423, Short.MAX_VALUE)

    .add(statusPanelLayout.createSequentialGroup()

      .addContainerGap()

      .add(statusMessageLabel)

      .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 227,

              Short.MAX_VALUE)

      .add(progressBar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)

      .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)

      .add(statusAnimationLabel)

      .addContainerGap())

  );

  statusPanelLayout.setVerticalGroup(

    statusPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout

                       .LEADING)

    .add(statusPanelLayout.createSequentialGroup()

      .add(statusPanelSeparator, org.jdesktop.layout.GroupLayout

        .PREFERRED_SIZE, 2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)

      .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED,

              org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

              Short.MAX_VALUE)

      .add(statusPanelLayout.createParallelGroup(org.jdesktop.layout

                           .GroupLayout.BASELINE)

        .add(statusMessageLabel)

        .add(statusAnimationLabel)

        .add(progressBar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

          org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

          org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))

      .add(3, 3, 3))

  );



  setComponent(mainPanel);

  setMenuBar(menuBar);

  setStatusBar(statusPanel);

}// </editor-fold>



private void tester(java.awt.event.MouseEvent evt) {



  Converter converter = new Converter();

  jTextArea2.setText(converter.fixParsedParagraph (jTextArea1.getText()) );

}



// Variables declaration - do not modify

private javax.swing.JButton jButton1;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JScrollPane jScrollPane2;

private javax.swing.JTextArea jTextArea1;

private javax.swing.JTextArea jTextArea2;

private javax.swing.JPanel mainPanel;

private javax.swing.JMenuBar menuBar;

private javax.swing.JProgressBar progressBar;

private javax.swing.JLabel statusAnimationLabel;

private javax.swing.JLabel statusMessageLabel;

private javax.swing.JPanel statusPanel;

// End of variables declaration



private final Timer messageTimer;

private final Timer busyIconTimer;

private final Icon idleIcon;

private final Icon[] busyIcons = new Icon[15];

private int busyIconIndex = 0;



private JDialog aboutBox;

}
java -Xms64m -Xmx256m my_prog
import javax.swing.*;

import java.awt.*;



public class JTextAreaPasteTest {



  private String testStr ="Paste text here.";



  public static void main(String argv[]) {

    EventQueue.invokeLater(new Runnable() {

      public void run() {

        new JTextAreaPasteTest();

      }

    });

  }



  public JTextAreaPasteTest () {

    JFrame frame = new JFrame();

    frame.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);

    PasteArea wrapArea = new PasteArea("Paste text here.");

    frame.setLayout(new FlowLayout());

    frame.add(new JScrollPane(wrapArea));

    frame.pack();

    frame.setVisible(true);

  }



  private static class PasteArea extends JTextArea {



    public PasteArea(String str) {

      super(str, 20, 40);

      this.setLineWrap(true);

      this.setWrapStyleWord(true);

      this.setCaretPosition(str.length());

    }

  }

}

更新 002

Java.lang.OutOfMemoryError: Java heap spaces
package bossconverter;



import org.jdesktop.application.Action;

import org.jdesktop.application.ResourceMap;

import org.jdesktop.application.SingleFrameApplication;

import org.jdesktop.application.FrameView;

import org.jdesktop.application.TaskMonitor;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.Timer;

import javax.swing.Icon;

import javax.swing.JDialog;

import javax.swing.JFrame;



/**

* The application's main frame.

*/

public class BOSSConverterView extends FrameView {



public BOSSConverterView(SingleFrameApplication app) {

  super(app);



  initComponents();



  // status bar initialization - message timeout, idle icon and busy animation, etc

  ResourceMap resourceMap = getResourceMap();

  int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");

  messageTimer = new Timer(messageTimeout, new ActionListener() {

    public void actionPerformed(ActionEvent e) {

      statusMessageLabel.setText("");

    }

  });

  messageTimer.setRepeats(false);

  int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");

  for (int i = 0; i < busyIcons.length; i++) {

    busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i +"]");

  }

  busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {

    public void actionPerformed(ActionEvent e) {

      busyIconIndex = (busyIconIndex + 1) % busyIcons.length;

      statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);

    }

  });

  idleIcon = resourceMap.getIcon("StatusBar.idleIcon");

  statusAnimationLabel.setIcon(idleIcon);

  progressBar.setVisible(false);



  // connecting action tasks to status bar via TaskMonitor

  TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());

  taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {

    public void propertyChange(java.beans.PropertyChangeEvent evt) {

      String propertyName = evt.getPropertyName();

      if ("started".equals(propertyName)) {

        if (!busyIconTimer.isRunning()) {

          statusAnimationLabel.setIcon(busyIcons[0]);

          busyIconIndex = 0;

          busyIconTimer.start();

        }

        progressBar.setVisible(true);

        progressBar.setIndeterminate(true);

      } else if ("done".equals(propertyName)) {

        busyIconTimer.stop();

        statusAnimationLabel.setIcon(idleIcon);

        progressBar.setVisible(false);

        progressBar.setValue(0);

      } else if ("message".equals(propertyName)) {

        String text = (String)(evt.getNewValue());

        statusMessageLabel.setText((text == null) ?"" : text);

        messageTimer.restart();

      } else if ("progress".equals(propertyName)) {

        int value = (Integer)(evt.getNewValue());

        progressBar.setVisible(true);

        progressBar.setIndeterminate(false);

        progressBar.setValue(value);

      }

    }

  });

}



@Action

public void showAboutBox() {

  if (aboutBox == null) {

    JFrame mainFrame = BOSSConverterApp.getApplication().getMainFrame();

    aboutBox = new BOSSConverterAboutBox(mainFrame);

    aboutBox.setLocationRelativeTo(mainFrame);

  }

  BOSSConverterApp.getApplication().show(aboutBox);

}



/** 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() {



  mainPanel = new javax.swing.JPanel();

  jScrollPane1 = new javax.swing.JScrollPane();

  jTextArea1 = new javax.swing.JTextArea();

  jScrollPane2 = new javax.swing.JScrollPane();

  jTextArea2 = new javax.swing.JTextArea();

  jButton1 = new javax.swing.JButton();

  menuBar = new javax.swing.JMenuBar();

  javax.swing.JMenu fileMenu = new javax.swing.JMenu();

  javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem();

  javax.swing.JMenu helpMenu = new javax.swing.JMenu();

  javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem();

  statusPanel = new javax.swing.JPanel();

  javax.swing.JSeparator statusPanelSeparator = new javax.swing.JSeparator();

  statusMessageLabel = new javax.swing.JLabel();

  statusAnimationLabel = new javax.swing.JLabel();

  progressBar = new javax.swing.JProgressBar();



  mainPanel.setName("mainPanel"); // NOI18N



  jScrollPane1.setName("jScrollPane1"); // NOI18N



  jTextArea1.setColumns(20);

  jTextArea1.setRows(5);

  jTextArea1.setName("jTextArea1"); // NOI18N

  jScrollPane1.setViewportView(jTextArea1);



  jScrollPane2.setName("jScrollPane2"); // NOI18N



  jTextArea2.setColumns(20);

  jTextArea2.setRows(5);

  jTextArea2.setName("jTextArea2"); // NOI18N

  jScrollPane2.setViewportView(jTextArea2);



  org.jdesktop.application.ResourceMap resourceMap =

        org.jdesktop.application.Application.getInstance

         (bossconverter.BOSSConverterApp.class).getContext()

         .getResourceMap(BOSSConverterView.class);

  jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N

  jButton1.setName("jButton1"); // NOI18N

  jButton1.addMouseListener(new java.awt.event.MouseAdapter() {

    public void mouseClicked(java.awt.event.MouseEvent evt) {

      tester(evt);

    }

  });



  org.jdesktop.layout.GroupLayout mainPanelLayout =

        new org.jdesktop.layout.GroupLayout(mainPanel);

  mainPanel.setLayout(mainPanelLayout);

  mainPanelLayout.setHorizontalGroup(

    mainPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)

    .add(mainPanelLayout.createSequentialGroup()

      .addContainerGap()

      .add(mainPanelLayout.createParallelGroup(org.jdesktop.layout

                          .GroupLayout.LEADING)

        .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

          383, Short.MAX_VALUE)

        .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

          383, Short.MAX_VALUE)

        .add(org.jdesktop.layout.GroupLayout.TRAILING, jButton1))

      .addContainerGap())

  );

  mainPanelLayout.setVerticalGroup(

    mainPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)

    .add(mainPanelLayout.createSequentialGroup()

      .addContainerGap()

      .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

        98, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)

      .add(18, 18, 18)

      .add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

        97, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)

      .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)

      .add(jButton1)

      .addContainerGap(22, Short.MAX_VALUE))

  );



  menuBar.setName("menuBar"); // NOI18N



  fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N

  fileMenu.setName("fileMenu"); // NOI18N



  javax.swing.ActionMap actionMap = org.jdesktop.application.Application

                   .getInstance(bossconverter.BOSSConverterApp

                   .class).getContext().getActionMap

                   (BOSSConverterView.class, this);

  exitMenuItem.setAction(actionMap.get("quit")); // NOI18N

  exitMenuItem.setName("exitMenuItem"); // NOI18N

  fileMenu.add(exitMenuItem);



  menuBar.add(fileMenu);



  helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N

  helpMenu.setName("helpMenu"); // NOI18N



  aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N

  aboutMenuItem.setName("aboutMenuItem"); // NOI18N

  helpMenu.add(aboutMenuItem);



  menuBar.add(helpMenu);



  statusPanel.setName("statusPanel"); // NOI18N



  statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N



  statusMessageLabel.setName("statusMessageLabel"); // NOI18N



  statusAnimationLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);

  statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N



  progressBar.setName("progressBar"); // NOI18N



  org.jdesktop.layout.GroupLayout statusPanelLayout = new org.jdesktop.layout

                            .GroupLayout(statusPanel);

  statusPanel.setLayout(statusPanelLayout);

  statusPanelLayout.setHorizontalGroup(

    statusPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout

                       .LEADING)

    .add(statusPanelSeparator, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

      423, Short.MAX_VALUE)

    .add(statusPanelLayout.createSequentialGroup()

      .addContainerGap()

      .add(statusMessageLabel)

      .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 227,

              Short.MAX_VALUE)

      .add(progressBar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)

      .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)

      .add(statusAnimationLabel)

      .addContainerGap())

  );

  statusPanelLayout.setVerticalGroup(

    statusPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout

                       .LEADING)

    .add(statusPanelLayout.createSequentialGroup()

      .add(statusPanelSeparator, org.jdesktop.layout.GroupLayout

        .PREFERRED_SIZE, 2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)

      .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED,

              org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

              Short.MAX_VALUE)

      .add(statusPanelLayout.createParallelGroup(org.jdesktop.layout

                           .GroupLayout.BASELINE)

        .add(statusMessageLabel)

        .add(statusAnimationLabel)

        .add(progressBar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

          org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

          org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))

      .add(3, 3, 3))

  );



  setComponent(mainPanel);

  setMenuBar(menuBar);

  setStatusBar(statusPanel);

}// </editor-fold>



private void tester(java.awt.event.MouseEvent evt) {



  Converter converter = new Converter();

  jTextArea2.setText(converter.fixParsedParagraph (jTextArea1.getText()) );

}



// Variables declaration - do not modify

private javax.swing.JButton jButton1;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JScrollPane jScrollPane2;

private javax.swing.JTextArea jTextArea1;

private javax.swing.JTextArea jTextArea2;

private javax.swing.JPanel mainPanel;

private javax.swing.JMenuBar menuBar;

private javax.swing.JProgressBar progressBar;

private javax.swing.JLabel statusAnimationLabel;

private javax.swing.JLabel statusMessageLabel;

private javax.swing.JPanel statusPanel;

// End of variables declaration



private final Timer messageTimer;

private final Timer busyIconTimer;

private final Icon idleIcon;

private final Icon[] busyIcons = new Icon[15];

private int busyIconIndex = 0;



private JDialog aboutBox;

}
java -Xms64m -Xmx256m my_prog
import javax.swing.*;

import java.awt.*;



public class JTextAreaPasteTest {



  private String testStr ="Paste text here.";



  public static void main(String argv[]) {

    EventQueue.invokeLater(new Runnable() {

      public void run() {

        new JTextAreaPasteTest();

      }

    });

  }



  public JTextAreaPasteTest () {

    JFrame frame = new JFrame();

    frame.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);

    PasteArea wrapArea = new PasteArea("Paste text here.");

    frame.setLayout(new FlowLayout());

    frame.add(new JScrollPane(wrapArea));

    frame.pack();

    frame.setVisible(true);

  }



  private static class PasteArea extends JTextArea {



    public PasteArea(String str) {

      super(str, 20, 40);

      this.setLineWrap(true);

      this.setWrapStyleWord(true);

      this.setCaretPosition(str.length());

    }

  }

}

这是 netbeans 为我的 GUI 自动生成的代码。

那么里面有什么需要修复的吗?


Java 虚拟机采用两个命令行参数来设置初始和最大堆大小:

-Xms 和 -Xmx。例如,如果你想给你的 Java 程序一个 64Mb 的初始和 256Mb 的最大堆大小,你可以按如下方式启动它:

Java.lang.OutOfMemoryError: Java heap spaces
package bossconverter;



import org.jdesktop.application.Action;

import org.jdesktop.application.ResourceMap;

import org.jdesktop.application.SingleFrameApplication;

import org.jdesktop.application.FrameView;

import org.jdesktop.application.TaskMonitor;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.Timer;

import javax.swing.Icon;

import javax.swing.JDialog;

import javax.swing.JFrame;



/**

* The application's main frame.

*/

public class BOSSConverterView extends FrameView {



public BOSSConverterView(SingleFrameApplication app) {

  super(app);



  initComponents();



  // status bar initialization - message timeout, idle icon and busy animation, etc

  ResourceMap resourceMap = getResourceMap();

  int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");

  messageTimer = new Timer(messageTimeout, new ActionListener() {

    public void actionPerformed(ActionEvent e) {

      statusMessageLabel.setText("");

    }

  });

  messageTimer.setRepeats(false);

  int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");

  for (int i = 0; i < busyIcons.length; i++) {

    busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i +"]");

  }

  busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {

    public void actionPerformed(ActionEvent e) {

      busyIconIndex = (busyIconIndex + 1) % busyIcons.length;

      statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);

    }

  });

  idleIcon = resourceMap.getIcon("StatusBar.idleIcon");

  statusAnimationLabel.setIcon(idleIcon);

  progressBar.setVisible(false);



  // connecting action tasks to status bar via TaskMonitor

  TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());

  taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {

    public void propertyChange(java.beans.PropertyChangeEvent evt) {

      String propertyName = evt.getPropertyName();

      if ("started".equals(propertyName)) {

        if (!busyIconTimer.isRunning()) {

          statusAnimationLabel.setIcon(busyIcons[0]);

          busyIconIndex = 0;

          busyIconTimer.start();

        }

        progressBar.setVisible(true);

        progressBar.setIndeterminate(true);

      } else if ("done".equals(propertyName)) {

        busyIconTimer.stop();

        statusAnimationLabel.setIcon(idleIcon);

        progressBar.setVisible(false);

        progressBar.setValue(0);

      } else if ("message".equals(propertyName)) {

        String text = (String)(evt.getNewValue());

        statusMessageLabel.setText((text == null) ?"" : text);

        messageTimer.restart();

      } else if ("progress".equals(propertyName)) {

        int value = (Integer)(evt.getNewValue());

        progressBar.setVisible(true);

        progressBar.setIndeterminate(false);

        progressBar.setValue(value);

      }

    }

  });

}



@Action

public void showAboutBox() {

  if (aboutBox == null) {

    JFrame mainFrame = BOSSConverterApp.getApplication().getMainFrame();

    aboutBox = new BOSSConverterAboutBox(mainFrame);

    aboutBox.setLocationRelativeTo(mainFrame);

  }

  BOSSConverterApp.getApplication().show(aboutBox);

}



/** 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() {



  mainPanel = new javax.swing.JPanel();

  jScrollPane1 = new javax.swing.JScrollPane();

  jTextArea1 = new javax.swing.JTextArea();

  jScrollPane2 = new javax.swing.JScrollPane();

  jTextArea2 = new javax.swing.JTextArea();

  jButton1 = new javax.swing.JButton();

  menuBar = new javax.swing.JMenuBar();

  javax.swing.JMenu fileMenu = new javax.swing.JMenu();

  javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem();

  javax.swing.JMenu helpMenu = new javax.swing.JMenu();

  javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem();

  statusPanel = new javax.swing.JPanel();

  javax.swing.JSeparator statusPanelSeparator = new javax.swing.JSeparator();

  statusMessageLabel = new javax.swing.JLabel();

  statusAnimationLabel = new javax.swing.JLabel();

  progressBar = new javax.swing.JProgressBar();



  mainPanel.setName("mainPanel"); // NOI18N



  jScrollPane1.setName("jScrollPane1"); // NOI18N



  jTextArea1.setColumns(20);

  jTextArea1.setRows(5);

  jTextArea1.setName("jTextArea1"); // NOI18N

  jScrollPane1.setViewportView(jTextArea1);



  jScrollPane2.setName("jScrollPane2"); // NOI18N



  jTextArea2.setColumns(20);

  jTextArea2.setRows(5);

  jTextArea2.setName("jTextArea2"); // NOI18N

  jScrollPane2.setViewportView(jTextArea2);



  org.jdesktop.application.ResourceMap resourceMap =

        org.jdesktop.application.Application.getInstance

         (bossconverter.BOSSConverterApp.class).getContext()

         .getResourceMap(BOSSConverterView.class);

  jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N

  jButton1.setName("jButton1"); // NOI18N

  jButton1.addMouseListener(new java.awt.event.MouseAdapter() {

    public void mouseClicked(java.awt.event.MouseEvent evt) {

      tester(evt);

    }

  });



  org.jdesktop.layout.GroupLayout mainPanelLayout =

        new org.jdesktop.layout.GroupLayout(mainPanel);

  mainPanel.setLayout(mainPanelLayout);

  mainPanelLayout.setHorizontalGroup(

    mainPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)

    .add(mainPanelLayout.createSequentialGroup()

      .addContainerGap()

      .add(mainPanelLayout.createParallelGroup(org.jdesktop.layout

                          .GroupLayout.LEADING)

        .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

          383, Short.MAX_VALUE)

        .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

          383, Short.MAX_VALUE)

        .add(org.jdesktop.layout.GroupLayout.TRAILING, jButton1))

      .addContainerGap())

  );

  mainPanelLayout.setVerticalGroup(

    mainPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)

    .add(mainPanelLayout.createSequentialGroup()

      .addContainerGap()

      .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

        98, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)

      .add(18, 18, 18)

      .add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

        97, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)

      .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)

      .add(jButton1)

      .addContainerGap(22, Short.MAX_VALUE))

  );



  menuBar.setName("menuBar"); // NOI18N



  fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N

  fileMenu.setName("fileMenu"); // NOI18N



  javax.swing.ActionMap actionMap = org.jdesktop.application.Application

                   .getInstance(bossconverter.BOSSConverterApp

                   .class).getContext().getActionMap

                   (BOSSConverterView.class, this);

  exitMenuItem.setAction(actionMap.get("quit")); // NOI18N

  exitMenuItem.setName("exitMenuItem"); // NOI18N

  fileMenu.add(exitMenuItem);



  menuBar.add(fileMenu);



  helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N

  helpMenu.setName("helpMenu"); // NOI18N



  aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N

  aboutMenuItem.setName("aboutMenuItem"); // NOI18N

  helpMenu.add(aboutMenuItem);



  menuBar.add(helpMenu);



  statusPanel.setName("statusPanel"); // NOI18N



  statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N



  statusMessageLabel.setName("statusMessageLabel"); // NOI18N



  statusAnimationLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);

  statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N



  progressBar.setName("progressBar"); // NOI18N



  org.jdesktop.layout.GroupLayout statusPanelLayout = new org.jdesktop.layout

                            .GroupLayout(statusPanel);

  statusPanel.setLayout(statusPanelLayout);

  statusPanelLayout.setHorizontalGroup(

    statusPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout

                       .LEADING)

    .add(statusPanelSeparator, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

      423, Short.MAX_VALUE)

    .add(statusPanelLayout.createSequentialGroup()

      .addContainerGap()

      .add(statusMessageLabel)

      .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 227,

              Short.MAX_VALUE)

      .add(progressBar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

        org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

        org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)

      .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)

      .add(statusAnimationLabel)

      .addContainerGap())

  );

  statusPanelLayout.setVerticalGroup(

    statusPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout

                       .LEADING)

    .add(statusPanelLayout.createSequentialGroup()

      .add(statusPanelSeparator, org.jdesktop.layout.GroupLayout

        .PREFERRED_SIZE, 2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)

      .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED,

              org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

              Short.MAX_VALUE)

      .add(statusPanelLayout.createParallelGroup(org.jdesktop.layout

                           .GroupLayout.BASELINE)

        .add(statusMessageLabel)

        .add(statusAnimationLabel)

        .add(progressBar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,

          org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,

          org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))

      .add(3, 3, 3))

  );



  setComponent(mainPanel);

  setMenuBar(menuBar);

  setStatusBar(statusPanel);

}// </editor-fold>



private void tester(java.awt.event.MouseEvent evt) {



  Converter converter = new Converter();

  jTextArea2.setText(converter.fixParsedParagraph (jTextArea1.getText()) );

}



// Variables declaration - do not modify

private javax.swing.JButton jButton1;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JScrollPane jScrollPane2;

private javax.swing.JTextArea jTextArea1;

private javax.swing.JTextArea jTextArea2;

private javax.swing.JPanel mainPanel;

private javax.swing.JMenuBar menuBar;

private javax.swing.JProgressBar progressBar;

private javax.swing.JLabel statusAnimationLabel;

private javax.swing.JLabel statusMessageLabel;

private javax.swing.JPanel statusPanel;

// End of variables declaration



private final Timer messageTimer;

private final Timer busyIconTimer;

private final Icon idleIcon;

private final Icon[] busyIcons = new Icon[15];

private int busyIconIndex = 0;



private JDialog aboutBox;

}
java -Xms64m -Xmx256m my_prog
import javax.swing.*;

import java.awt.*;



public class JTextAreaPasteTest {



  private String testStr ="Paste text here.";



  public static void main(String argv[]) {

    EventQueue.invokeLater(new Runnable() {

      public void run() {

        new JTextAreaPasteTest();

      }

    });

  }



  public JTextAreaPasteTest () {

    JFrame frame = new JFrame();

    frame.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);

    PasteArea wrapArea = new PasteArea("Paste text here.");

    frame.setLayout(new FlowLayout());

    frame.add(new JScrollPane(wrapArea));

    frame.pack();

    frame.setVisible(true);

  }



  private static class PasteArea extends JTextArea {



    public PasteArea(String str) {

      super(str, 20, 40);

      this.setLineWrap(true);

      this.setWrapStyleWord(true);

      this.setCaretPosition(str.length());

    }

  }

}

这是我按照教程制作的示例。有了足够的堆空间,我可以粘贴超过 200,000 行。您是否错过了事件队列中的异常?

Java.lang.OutOfMemoryError: Java heap spaces
package bossconverter;



import org.jdesktop.application.Action;

import org.jdesktop.application.ResourceMap;

import org.jdesktop.application.SingleFrameApplication;

import org.jdesktop.application.FrameView;

import org.jdesktop.application.TaskMonitor;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.Timer;

import javax.swing.Icon;

import javax.swing.JDialog;

import javax.swing.JFrame;



/**

* The application's main frame.

*/

public class BOSSConverterView extends FrameView {



public BOSSConverterView(SingleFrameApplication app) {

  super(app);



  initComponents();



  // status bar initialization - message timeout, idle icon and busy animation, etc

  ResourceMap resourceMap = getResourceMap();

  int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");

  messageTimer = new Timer(messageTimeout, new ActionListener() {

    public void actionPerformed(ActionEvent e) {

      statusMessageLabel.setText("");

    }

  });

  messageTimer.setRepeats(false);

  int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");

  for (int i = 0; i < busyIcons.length; i++) {

    busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i +"]");

  }

  busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {

    public void actionPerformed(ActionEvent e) {

      busyIconIndex = (busyIconIndex + 1) % busyIcons.length;

      statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);

    }

  });

  idleIcon = resourceMap.getIcon("StatusBar.idleIcon");

  statusAnimationLabel.setIcon(idleIcon);

  progressBar.setVisible(false);



  // connecting action tasks to status bar via TaskMonitor

  TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());

  taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {

    public void propertyChange(java.beans.PropertyChangeEvent evt) {

      String propertyName = evt.getPropertyName();

      if ("started".equals				

相关推荐

  • Spring部署设置openshift

    Springdeploymentsettingsopenshift我有一个问题让我抓狂了三天。我根据OpenShift帐户上的教程部署了spring-eap6-quickstart代码。我已配置调试选项,并且已将Eclipse工作区与OpehShift服务器同步-服务器上的一切工作正常,但在Eclipse中出现无法消除的错误。我有这个错误:cvc-complex-type.2.4.a:Invali…
    2025-04-161
  • 检查Java中正则表达式中模式的第n次出现

    CheckfornthoccurrenceofpatterninregularexpressioninJava本问题已经有最佳答案,请猛点这里访问。我想使用Java正则表达式检查输入字符串中特定模式的第n次出现。你能建议怎么做吗?这应该可以工作:MatchResultfindNthOccurance(intn,Patternp,CharSequencesrc){Matcherm=p.matcher…
    2025-04-161
  • 如何让 JTable 停留在已编辑的单元格上

    HowtohaveJTablestayingontheeditedcell如果有人编辑JTable的单元格内容并按Enter,则内容会被修改并且表格选择会移动到下一行。是否可以禁止JTable在单元格编辑后转到下一行?原因是我的程序使用ListSelectionListener在单元格选择上同步了其他一些小部件,并且我不想在编辑当前单元格后选择下一行。Enter的默认绑定是名为selectNext…
    2025-04-161
  • Weblogic 12c 部署

    Weblogic12cdeploy我正在尝试将我的应用程序从Tomcat迁移到Weblogic12.2.1.3.0。我能够毫无错误地部署应用程序,但我遇到了与持久性提供程序相关的运行时错误。这是堆栈跟踪:javax.validation.ValidationException:CalltoTraversableResolver.isReachable()threwanexceptionatorg.…
    2025-04-161
  • Resteasy Content-Type 默认值

    ResteasyContent-Typedefaults我正在使用Resteasy编写一个可以返回JSON和XML的应用程序,但可以选择默认为XML。这是我的方法:@GET@Path("/content")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})publicStringcontentListRequestXm…
    2025-04-161
  • 代码不会停止运行,在 Java 中

    thecodedoesn'tstoprunning,inJava我正在用Java解决项目Euler中的问题10,即"Thesumoftheprimesbelow10is2+3+5+7=17.Findthesumofalltheprimesbelowtwomillion."我的代码是packageprojecteuler_1;importjava.math.BigInteger;importjava…
    2025-04-161
  • Out of memory java heap space

    Outofmemoryjavaheapspace我正在尝试将大量文件从服务器发送到多个客户端。当我尝试发送大小为700mb的文件时,它显示了"OutOfMemoryjavaheapspace"错误。我正在使用Netbeans7.1.2版本。我还在属性中尝试了VMoption。但仍然发生同样的错误。我认为阅读整个文件存在一些问题。下面的代码最多可用于300mb。请给我一些建议。提前致谢publicc…
    2025-04-161
  • Log4j 记录到共享日志文件

    Log4jLoggingtoaSharedLogFile有没有办法将log4j日志记录事件写入也被其他应用程序写入的日志文件。其他应用程序可以是非Java应用程序。有什么缺点?锁定问题?格式化?Log4j有一个SocketAppender,它将向服务发送事件,您可以自己实现或使用与Log4j捆绑的简单实现。它还支持syslogd和Windows事件日志,这对于尝试将日志输出与来自非Java应用程序…
    2025-04-161