小编djm*_*gal的帖子

为什么PrintStream"out"和InputStream"in"为null?

出于好奇,我正在查看docjar.com上的一些Java API类的源代码.我看到了java.lang.System类,发现PrintStream"out"(即System.out)有以下代码:

public final static PrintStream out = null;
Run Code Online (Sandbox Code Playgroud)

并在评论中说:

The "standard" output stream. This stream is already
open and ready to accept output data.
Run Code Online (Sandbox Code Playgroud)

我的问题是,我知道最终变量无法修改,所以为什么声明时它为null?当调用"out"方法时,为什么Java不抛出NullPointerException?System.in也是如此.

谢谢你的任何澄清.

java

6
推荐指数
1
解决办法
415
查看次数

导入 Java 包的典型约定是什么?

在我大学的编程课上,即使我们只使用其中的一个类,我们也只会导入整个包。这可能是因为我们应该使用不提供自动完成功能或任何类似功能的 IDE,所以一般来说它只会使编码更容易。

但是,既然我是一个经验丰富的程序员,那么是将 Java 包作为一个整体导入还是仅导入您需要的那些包中的类更为传统?

例如,而不是:

import java.util.*;
Run Code Online (Sandbox Code Playgroud)

是否习惯说:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
Run Code Online (Sandbox Code Playgroud)

等等。?

与选择类相比,导入整个包是否使用更多内存?

java

5
推荐指数
1
解决办法
922
查看次数

是否有一种更有效的方法来处理按钮单击事件而不是几个if语句?

所以,我会尽力解释这个问题......

基本上,我有一个GUI,其主窗口上有几个按钮(可能大约10个).我将按钮本身放在一个数组中,但是当涉及到处理每个按钮的点击事件时,根据点击哪一个,会发生不同的事情.

而不是做这样的事情:

@Override
public void actionPerformed(ActionEvent e) {
    if(e.getActionCommand().equals("Button1Text") { /* do stuff */ }
    else if(e.getActionCommand().equals("Button2Text") { /* do stuff */ }
    else if(e.getActionCommand().equals("Button3Text") { /* do stuff */ }
    else if(e.getActionCommand().equals("Button4Text") { /* do stuff */ }
}
Run Code Online (Sandbox Code Playgroud)

点击时是否有更有效的方法来处理每个按钮的响应?我们的想法是,无论何时点击一个按钮,都会打开一个新窗口,让用户执行与该按钮相关的各种任务.我想在某种程度上getActionCommand()Class.forName()/ newInstance()方法结合使用,但我不确定是否有另一种(或更简单)的方法来做这样的事情.

java swing class-design jbutton actionlistener

5
推荐指数
1
解决办法
100
查看次数

Java编译器使用JComboBox发出"未经检查或不安全的操作"警告

基本上我是一个相当开始的Java学生,我必须创建一个包含JComboBox的简单GUI.该窗口看起来像这样:http://i.imgur.com/Jg7j4XD.jpg

当我编译代码(如下所示)时,它确实编译但我在jGRASP中收到以下警告:

Note: Lab6.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Run Code Online (Sandbox Code Playgroud)

这是我的代码.我知道这意味着我必须指定涉及数据类型的东西(对吗?)但我认为我已经指定了足够的东西.感谢任何能提供帮助的人.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Lab6 extends JFrame
{
    private String[] choices = {"Hello", "Good-Bye"};

    public Lab6()
    {
        super("218 Lab 6");
        setSize(450,200);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLayout(new BorderLayout());

        JPanel panelNorth = new JPanel();
            panelNorth.add(new JLabel("Welcome Class 218!"));

            JComboBox comboBox = new JComboBox(choices);
            panelNorth.add(comboBox);

            add(panelNorth,BorderLayout.NORTH);
    }

    public static void main(String[] args)
    {
        new Lab6();
    }
}
Run Code Online (Sandbox Code Playgroud)

java user-interface

2
推荐指数
1
解决办法
6388
查看次数

如何远程切换JPanel?

我试图在我的程序中工作的概念基本上是:

-Main Window:一个包含程序主框架的主类,即:

public class MainWindow extends JFrame {
    ...
}
Run Code Online (Sandbox Code Playgroud)

- 其他类:扩展JPanel的类,以便它们可以作为一个对象或实体轻松添加到MainWindow,即:

public class SomePanel extends JPanel {
    ...
}
Run Code Online (Sandbox Code Playgroud)

这样,我可以说,对于主窗口:

public MainWindow() {
...
SomePanel sp = new SomePanel();
add(sp);
...
}
Run Code Online (Sandbox Code Playgroud)

当触发一些ActionEvent时,我可以说,在MainWindow类中:

// remove the current panel
getContentPane().remove(sp);
// insert the new panel
getContentPane().add(someOtherPanel);
validate();
repaint();
Run Code Online (Sandbox Code Playgroud)

我想这个概念就像CardLayout一样,除了我还没有学习过CardLayout之外,我觉得我试着尝试这个概念.我可能会在某些时候学习CardLayout,这取决于什么更容易.

但我的主要问题是,如果一切都在不同的类中,我如何根据ActionEvent的触发器在远程JPanel之间切换?我认为类之间必须有一些共享组件,但这似乎不起作用.我是在正确的轨道上吗?

我正在尝试删除()和add()的代码似乎没有工作,因为当我触发组件的ActionEvent(添加了侦听器和所有内容)时没有任何变化.我还包括validate()和repaint()但仍然没有任何反应.

我不再是初学者了,但也不是非常有经验的人,所以如果有一些明显我缺少的东西,请耐心等待.谢谢你的帮助.

java swing jpanel jframe

1
推荐指数
2
解决办法
105
查看次数

Java - 读取和写入文本文件

我成功地能够读取和写入Java中的示例文本文件.但是,当我尝试从文件中读取时,它总是在到达文件末尾时抛出NoSuchElementException.我已经修改了代码以通过打印"Reached end of file"来捕获此异常,但我想知道这是否正常; 我不喜欢它,我觉得我错过了什么.

任何帮助表示赞赏.这是我的代码:

MyFileWriter.java

import java.io.*;

public class MyFileWriter {

   public static void main(String[] args) {
      File file = new File("MyFile.txt");
      PrintWriter out = null;

      try {
         out = new PrintWriter(file);
         out.write("This is a text file.");
      } catch(IOException e) {
         e.printStackTrace();
         System.out.println("IOException: " + e.getMessage());
      } finally {
         out.flush();
         out.close();
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

MyFileReader.java

import java.io.*;
import java.util.*;

public class MyFileReader {
  public static void main(String[] args) {

     File file = new File("MyFile.txt");
     Scanner scan = null; …
Run Code Online (Sandbox Code Playgroud)

java

0
推荐指数
1
解决办法
146
查看次数