cornercorner
FeaturesPluginsDocs & SupportCommunityPartners

NBzhCNfaq20081010

NetBeans 有问必答活动 - 2008/10/10

  • 1:【有问必答】ubuntu下开启桌面效果后启动netbeans时出现问题

装的是Ubuntu7.04,没有开启桌面效果之前用NetBeans没有任何问题,开启桌面效果之后启动NetBeans,结果只有标题栏能现出来,整个主窗口就全部是灰色的,什么也看不到,如何解决?
Rebecca: 我猜你应该是使用了Compiz,影响了Netbeans。试着下载新的Ubuntu的update,并且升级你的JDK到6。

  • 2:【有问必答】netbean6.0的j2ee应用部署问题

刚安装了netbeans6.0来,随便写了个j2ee应用程序并部署到Sun Java Application Server 9.2上,发现domain1 服务器的部署目录里没有.ear文件,只是在netbeans工程的dist目录里有个gfdeploy目录,下面又有XX-ejb_jar这样的目录,貌似5.0版本都不是这样的阿,而且服务器还报错,请问是不是有什么需要配置阿?
蒋健:首先请确认Sun Java Application Server的版本,目前最新的应该是Sun Java Application Server 9.1 UR2。另外,请将报错的信息(最好是服务器日志)发过来以来以便进一步判断,一般来说,J2EE应用特别配置的地方主要是和数据库相关的地方。

  • 3:【有问必答】路径设置问题

我如今配置了Netbeans 和ruby,确实能正常使用。但是,在netbeans项目中,那个 require 命令好像只认绝对路径。比喻:新建一个工程文件的目录结构如下: Ruby

 test
main.rb
test1.rb

如果 main 函数需要使用 test1中的module或者class,必须
require File.dirname(FILE) + '/test1'
require 'test/test1.rb' 会报错;
而在 eclipse 或者 Aptana 中,一般都是 require 'test/test1'; 请问:如何配置netbeans,才能让系统能认 require ‘test/test1'?
Rebecca: 最好是用绝对路径,如果用相对路径则受当前所在路径的影响,因为你的当前路径不一定是项目的所在路径。

  • 4:【有问必答】编译类文件输入路径的问题

以前一直使用Eclipse开发,在使用rails时候用了netbeans专为ruby开发的IDE,突然想试一试使用netbeans的感觉。 下载了netbeans 5.5,我的机器一直使用的是jdk5 。下载安装后开始试用。 新建一个工程,使用了我以前的一个项目使用的源代码包,建立后,使用感觉还不错。 在配置类文件编译输出路径时郁闷了一下,找不到在哪里设置,在编译选项中有一个配置项,为其他编译选项,手工输入了-d D:\test class path,在d盘建立了这个文件夹,生成项目。 项目生成失败,看了报错信息,信息显示如下: javac: 无效的标志: class 用法:javac <选项> <源文件> 其中,可能的选项包括: -g 生成所有调试信息 -g:none 不生成任何调试信息 -g:{lines,vars,source} 只生成某些调试信息 -nowarn 不生成任何警告 -verbose 输出有关编译器正在执行的操作的消息 -deprecation 输出使用已过时的 API 的源位置 -classpath <路径> 指定查找用户类文件的位置 -cp <路径> 指定查找用户类文件的位置 -sourcepath <路径> 指定查找输入源文件的位置 -bootclasspath <路径> 覆盖引导类文件的位置 -extdirs <目录> 覆盖安装的扩展目录的位置 -endorseddirs <目录> 覆盖签名的标准路径的位置 -d <目录> 指定存放生成的类文件的位置 -encoding <编码> 指定源文件使用的字符编码 -source <版本> 提供与指定版本的源兼容性 -target <版本> 生成特定 VM 版本的类文件 -version 版本信息 -help 输出标准选项的提要 -X 输出非标准选项的提要 -J<标志> 直接将 <标志> 传递给运行时系统

失败(总时间:2 秒)

 看的出来,是文件夹的名称中的空格使得编译工程失败了,修改文件夹名称,去掉空格,这次顺利的生成项目了。

有的时候文件夹的名称不可避免的会有空格,又不能更改文件夹名称,这个问题netbeans怎么解决?
Joey: 将命令改成:-d "D:\test class path"。

  • 5:【有问必答】我使用netbeans 6.1大概有3-4个月了吧,但是有一个问题一直让我困扰不已。

我在一个frame设计好了所有的swing components,然后我希望在另外一个frame也使用同样的swing components,当然,最直接的办法是在源frame上选取所有的components,然后copy, 到目标frame上paste。现在的问题是,这些被copy的components是按照我的要求到了目标frame,但是所有的由paste生成的compoents的layout属性不见了,我还希望稍稍调整一下位置,这下倒好,只能通过鼠标去拖拉了,好麻烦,因为这个自动对准的功能经常让我把这个对好了位置,另外一个又自动拉长了。 所以想请专家提示一下如何应对这个情况,另外,怎样更好的使用netbeans的free design的功能。 谢谢!
Joey: 我在Netbeans 6.1的GUI Builder中复制一个JFrame上的Components到另外一个JFrame上,这些Components的Layout信息都能够保存下来,因而无法重现问题。一般来讲,在Free Design下,对于已经布局好的控件,要更改其位置相对比较困难。因为Free Design对应的GroupLayout会记录下每个Component跟周围一些Component的位置关系,体现在右键菜单的Anchor(锚点)记录中。我的建议是,在修改某一控件位置时,先去掉该控件对应的Anchor,然后再作移动。

  • 6:【有问必答】Cannot find java错误问题。

我下载了NetBeans 5.5中文版免安装的,解压之后直接运行了。 我重新安装了JDK后,发现NetBeans无法运行了。提示: Cannot find java.exe in 1\... 我环境变量设置都正确,问题出在哪?
Leon: 到 Netbeans 的安装目录的 etc 下,将你新的 java 路径更新文件 netbeans.conf 中的 netbeans_jdkhome

  • 7:【有问必答】java netbeans 问题。

HTTP Status 404 - /HandlerFormInput.jsp type Status report message /HandlerFormInput.jsp description The requested resource (/HandlerFormInput.jsp) is not available. Apache Tomcat/5.5.17 按提交按钮后没得到相应的内容,错误如上,不知道怎么回事。请高手指点
Michael: 看起来应该是你的Jsp文件中引用的resource找不到

  • 8:【有问必答】急急!用cactus测试时出现Connection refused: connect

package cn.argo.unittest;


import java.io.IOException;

import javax.servlet.RequestDispatcher; import javax.servlet.ServletException;

import org.apache.cactus.ServletTestCase; import org.apache.cactus.WebRequest;


import com.meterware.httpunit.WebResponse;


public class LoginServletTest extends ServletTestCase {


public static void main(String[[ | ]] args) {

junit.textui.TestRunner.run(LoginServletTest.class);

}



public LoginServletTest() { // TODO Auto-generated constructor stub }

public void beginValidUser(WebRequest webreq) { webreq.addParameter("username", "steven"; webreq.addParameter("password", "1234"; }

public void testValidUser() { LoginServlet login = new LoginServlet(); assertTrue(login.isValidUser(request)); } public void testWelcomePage() throws ServletException, IOException { request.setAttribute("username", "steven"; RequestDispatcher rd = request.getRequestDispatcher("/welcome.jsp"; rd.forward(request, response); }

public void endWelcomePage(WebResponse webResponse) { try { assertTrue(webResponse.getText().indexOf("Hello, steven!" > 0); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }


}


就这么几行代码 ,可总是报错 是error错误 ,还不是fail错误

java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket. <init>(Unknown Source) at java.net.Socket. <init>(Unknown Source) at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:86) at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:652) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:62 at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:526) at org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect_aroundBody0(HttpClientConnectionHelper.java:142) at org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect_aroundBody1$advice(HttpClientConnectionHelper.java:306) at org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect(HttpClientConnectionHelper.java) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.callRunTest(DefaultHttpClient.java:162) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody0(DefaultHttpClient.java:80) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody1$advice(DefaultHttpClient.java:306) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest(DefaultHttpClient.java) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runWebTest(HttpProtocolHandler.java:159) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody0(HttpProtocolHandler.java:80) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody1$advice(HttpProtocolHandler.java:306) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest(HttpProtocolHandler.java) at org.apache.cactus.internal.client.ClientTestCaseCaller.runTest(ClientTestCaseCaller.java:144) at org.apache.cactus.internal.AbstractCactusTestCase.runBareClient(AbstractCactusTestCase.java:215) at org.apache.cactus.internal.AbstractCactusTestCase.runBare(AbstractCactusTestCase.java:133) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:11 at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:12 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:3 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Michael: Cactus模拟Web用户连接到Server来测试代码。看起来你的应用有Security,是否应该有代码在做些init的工作?另外你测试的环境是否有Proxy或防火墙一类的软件?否则Server是不应该知道进来的需求是Web还是Cactus的。

  • 9:【有问必答】以后在使用NetBeans过程中发生疑问和问题,怎样获得帮助呢?。

我在一个frame设计好了所有的swing components,然后我希望在另外一个frame也使用同样的swing components,当然,最直接的办法是在源frame上选取所有的components,然后copy, 到目标frame上paste。现在的问题是,这些被copy的components是按照我的要求到了目标frame,但是所有的由paste生成的compoents的layout属性不见了,我还希望稍稍调整一下位置,这下倒好,只能通过鼠标去拖拉了,好麻烦,因为这个自动对准的功能经常让我把这个对好了位置,另外一个又自动拉长了。 所以想请专家提示一下如何应对这个情况,另外,怎样更好的使用netbeans的free design的功能。 谢谢!
Joey:见问题5的回答。

  • 10.【有问必答】关于swing!!。

看见有sun的专家们在这里,小弟也将自己困扰多时的问题发布出来,希望各位老大能够指点一二,小弟不胜感激。   小弟一直以来都从事delphi的开发,今年随着技术潮流的趋势开始学习java,埋头看书半年感觉小有成就。   这个月单位给个开发任务,做一个发票打印程序,必须实现的核心功能是:在表格中实现发票明细的录入。想想自己学java也有这么长时间,于是想用swing做,但偏偏这个核心功能没办法实现,郁闷死我了。到现在还不死心,因为这个程序的其他功能都已经实现,就这个功能无法完成,因此特来请教专家:   不说别的了,先把界面发给大家看看:这个界面是我用delphi实现的功能(btw:用delphi实现超级简单): (图见附件1)    

     这个程序的功能是:
     1、在"商品编码"栏里输入数值后按回车,则"品名"和"单价"栏里自动填入事先定义好的"商品名称"和"单价",同时焦点移动到"数量"栏中;在"数量"栏中输入数量后按回车,这"金额"栏中自动计算出"单价"和"数量"的乘积,同时焦点移动到"金额"栏中。

  2、在"金额"栏中按回车,则新增一个空行,同时焦点移动到新增行的第一列中。    (图见附件2)

     上述这些功能,我都已经实现,但上个星期又加了新的需求:在第一列的输入框边上要添加一个button,用来选择已经定义好的商品(红圈内):

   (图见附件3)

     于是一个通宵的看书和查找资料,通过TableCellRenderer实现了JTextField+JButton在栏中:
      (图见附件4)
     通过定义JTable的InputMap和ActionMap实现了按回车键点按行移动:
   现在问题出现了两个问题:
   1、在JTable的第一列中输入数字后并按回车,光标并没有跳到第二列,而是留在了JButton上。

  2、在JTable的最后一列上按回车,新增一行后,光标并没有移动新增行的第一列上,而是移动到新增行的第二列上。   (图见附件5)

  这个JTable是根据老外的范例改写的,因此不能算是我的原创,希望各位sun专家能帮我看看,该如何改写:

  源码在这里,一共三个类: Copy to clipboard - CODE: import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*;

public class CMiniTextField extends Box implements ActionListener,TableCellRenderer, FocusListener {

       private JTextField jtf = new JTextField("");
       private JButton lookup = new JButton("?");
       public CMiniTextField() {
               super(BoxLayout.X_AXIS);
               createHorizontalBox();
               lookup.addActionListener(this);
               lookup.setPreferredSize(new Dimension(17, 17));
               addContents();
               doFocusTraversal();
               addFocusListener(this);
       }
       public JTextField getTextField() {
               return jtf;
       }
       public String getText() {
               return jtf.getText();
       }
       public void setFieldText(String text) {
               jtf.setText(text);
               updateUI();
       }
       public JTextField getJTextField() {
               return jtf;
       }
       private void addContents() {
               add(jtf);
               add(lookup);
       }
       public void actionPerformed(ActionEvent e) {
               
       }
       public Component getTableCellRendererComponent(JTable table, Object value,
                       boolean isSelected, boolean hasFocus, int row, int column) {
               return this;
       }
       public void focusGained(FocusEvent e) {
               jtf.requestFocusInWindow();
       }
       public void focusLost(FocusEvent e) {
       }
       public void requestFocusAtStart() {
               jtf.requestFocus();
       }
       private void doFocusTraversal() {
               Action gotoTextField1Action = new AbstractAction() {
                       public void actionPerformed(ActionEvent e) {
                               jtf.requestFocusInWindow();
                       }
               };
               Action gotoButtonAction = new AbstractAction() {
                       public void actionPerformed(ActionEvent e) {
                               lookup.requestFocusInWindow();
                       }
               };
               jtf.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),
                               "gotoTextField2Action");
               jtf.getActionMap().put("gotoTextField2Action", gotoButtonAction);
               lookup.getInputMap().put(
                               KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,
                                               java.awt.event.InputEvent.SHIFT_MASK),
                               "gotoTextField1Action");
               lookup.getActionMap().put("gotoTextField1Action", gotoTextField1Action);
       }

}


Copy to clipboard - CODE: import java.awt.*; import javax.swing.*; import javax.swing.table.*;

public class CMiniTextFieldEditor extends AbstractCellEditor implements TableCellEditor {

       CMiniTextField m_addressBox;
       public CMiniTextFieldEditor() {
               m_addressBox = new CMiniTextField();
       }
       public Component getTableCellEditorComponent(JTable table, Object value,
               boolean isSelected, int rowIndex, int vColIndex) {
               m_addressBox.setFieldText(table.getValueAt(rowIndex, vColIndex) + "");
               m_addressBox.requestFocusAtStart();
               return m_addressBox;
       }
       public Object getCellEditorValue() {
               return m_addressBox.getText();
       }

}


Copy to clipboard - CODE: import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*;

import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JDesktopPane; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.KeyStroke;

public class GUI extends JInternalFrame {

       JTable table;
       Vector data;
       Vector columns;
       JTextField cellTextField = new JTextField();
       public GUI(String title, Dimension mainWindowSize) {
               super(title, true, true, true, true);
               initColumns();
               initData();
               initTable();
               buildFrame(mainWindowSize);
       }
       private void initColumns() {
               columns = new Vector();
               for (int i = 0; i < 5; i++)
                       columns.add("col " + i);
       }
       private void initData() {
               data = new Vector();
               data.add(blankElement());
       }
       private void initTable() {
               try {
                       table = new JTable(data, columns);
                       table.setAutoscrolls(true);
                       table.setColumnSelectionAllowed(false);
                       table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                       table.setSurrendersFocusOnKeystroke(true);
               } catch (Exception ex) {
                       
               }
               
               final Action tabAction = table.getActionMap().get(
                               "selectNextColumnCell");
               Action enterKey = new AbstractAction() {
                       public void actionPerformed(ActionEvent e) {
                               try {
                                       table.getCellEditor().stopCellEditing();
                               } catch (Exception ex) {
                               }
                               int selectedRow = table.getSelectedRow();
                               int selectedCol = table.getSelectedColumn();
                               if (selectedCol == table.getColumnCount() - 1) {
                                       try {
                                               if (selectedRow == table.getRowCount() - 1
                                                               && selectedCol == table.getColumnCount() - 1
                                                               && table.getRowCount()<6) {
                                                       addRow();
                                                       
                                               }
                                       } catch (Exception ex) {
                                               if (selectedRow > 0) {
                                                       setSelectedRow(selectedRow - 1);
                                               }
                                               JOptionPane.showMessageDialog(null, "Error: \n"
                                                               + ex.getMessage());
                                       }
                               } else if (selectedCol == 0) {
                                       System.out.println(table.getValueAt(selectedRow,
                                                       selectedCol));
                               }
                               tabAction.actionPerformed(e);
                       }
               };
               table.getInputMap().put(KeyStroke.getKeyStroke("ENTER"),
                               "selectNextColumnCell");
               table.getActionMap().put("selectNextColumnCell", enterKey);
               activateRenderers();
       }
       private void activateRenderers() {
               table.getColumnModel().getColumn(0).setCellEditor(
                               new CMiniTextFieldEditor());
       }
       public void setSelectedRow(int row) {
               table.setRowSelectionInterval(row, row);
               table.scrollRectToVisible(table.getCellRect(row, 0, true));
       }
       public void addRow() {
               data.addElement(blankElement());
               table.addNotify();
               setSelectedRow(table.getSelectedRow() + 1);
               table.changeSelection(table.getSelectedRow(), 0, false, false);
               //JOptionPane.showMessageDialog(null, table.getSelectedColumn());
       }
       public Vector blankElement() {
               Vector t = new Vector();
               t.add("");
               t.add(new Integer(0));
               t.add(new Long(0L));
               t.add(new Double(0));
               t.add(new Float(0));
               return t;
       }
       private void buildFrame(Dimension mainWindowSize) {
               try {
                       JScrollPane sp = new JScrollPane(table);
                       JPanel p = new JPanel(new GridBagLayout());
                       p.add(sp, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0,
                                       GridBagConstraints.WEST, GridBagConstraints.BOTH,
                                       new Insets(5, 5, 5, 5), 0, 0));
                       getContentPane().add(p, "Center");
                       setVisible(true);
                       setBounds(0, 0, (int) mainWindowSize.getWidth() - 50,
                                       (int) mainWindowSize.getHeight() - 100);
                       toFront();
                       setSelected(true);
               } catch (Exception ex) {
                       System.out.println("Error: " + ex);
               }
       }
       public static void main(String[[ | ]] args) {
               JFrame f = new JFrame();
               f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               f.setSize(1000, 500);
               JDesktopPane jd = new JDesktopPane();
               jd.add(new GUI("Tariff Lines", f.getSize()));
               f.getContentPane().add(jd, "Center");
               f.setVisible(true);
       }



  • 11:【有问必答】netbeans如何能设置文件的编码是GBK或gb2312,如何在打开GBK编码的文件时不出现乱码??

Rebecca: NetBeans 使用的缺省编码是UTF-8,你可以针对某个项目改变编码设置,右键单击项目节点,打开“属性”,改变 “源”>“编码”。

  • 12:【有问必答】请问json文件和html文件比有什么特点上的区别和优势?。

Joey:问题的提法中跟JSON文件对应的格式为XML更为合适一些,JSON和XML都是互联网传递数据的格式,简单的说,JSON跟XML比较优势在于更为简洁,因而通过JSON格式传递同样的数据信息,字节数要少于XML,不足之处是JSON还没有像XML那样被如此广泛的支持。