很高兴能够访问这个非常有用的网站。我的Java程序有问题,可能是一个简单的修复,或者无法修复。
您知道在运行NetBeans中打开的程序时,它如何显示NetBeans应用程序中的输出?我正在尝试创建一个程序,允许任何将它放在计算机上执行它的人,即使他们没有安装像NetBeans或Eclipse这样的IDE。当有人执行我的程序时,我希望它显示与在NetBeans中运行它时相同的内容,具有相同的输出和所有内容。该程序不使用GUI或类似的东西。我设法用“清理和构建项目”选项创建一个可执行的.jar文件,然后我创建了一个成功执行该程序的.bat文件。这应该实现我允许任何人运行它的目标。当我启动.bat文件时,它可以工作,并显示一个白色文本黑色背景屏幕,该屏幕在NetBeans中运行程序时完全按照它运行。
问题在于,当我运行程序时(使用.bat文件),文本太小了...... 我已经尝试到处寻找解决方案,但我可以只找到关于如何使用GUI或其他比我的程序需要更复杂的东西的讨论。如果有必要,我愿意使用GUI的东西,但由于GUI是什么,我认为它不会有所帮助。根据我的理解,GUI不是一件大事,而是一个用户界面,由较小的部分(如弹出输入提示和滚动条)组成,每个部分由程序员制作。我不需要任何花哨的滚动条等,我只需要我的程序执行就像在NetBeans中运行一样(很确定这称为控制台),我需要更改程序文本的文本大小执行。
我非常感谢任何帮助,即使您不确定它是否有效。如果答案需要冗长的解释并且您不想解释,那就没关系;告诉我,我必须学会解决这个问题,如有必要,我可以研究它。
答案 0 :(得分:0)
我刚刚创建了一个。尝试使用这个并告诉我们它是否有帮助。
编辑添加了一个JTextField来读取数据。它是比前一个更高级的代码,因为它使用并发。我试着简单,这些是你可以使用的功能:
MyConsole ()
:构造函数。创建并显示控制台print (String s)
:打印s
字符串println (String s)
打印s
字符串并添加新行read ()
:让您等到用户输入并按Enter
closeConsole ()
:关闭控制台以下是代码:
public class MyConsole implements ActionListener {
private JFrame frame;
private JTextArea myText;
private JTextField userText;
private String readText;
private Object sync;
/*
* Main and only constructor
*/
public MyConsole() {
// Synchronization object
sync = new Object();
// Create a window to display the console
frame = new JFrame("My Console");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 200);
frame.setLocationRelativeTo(null);
frame.setResizable(true);
frame.setContentPane(createUI());
frame.setVisible(true);
}
/*
* Creates user interface
*/
private Container createUI() {
// Create a Panel to add all objects
JPanel panel = new JPanel (new BorderLayout());
// Create and set the console
myText = new JTextArea();
myText.setEditable(false);
myText.setAutoscrolls(true);
myText.setBackground(Color.LIGHT_GRAY);
// This will auto scroll the right bar when text is added
DefaultCaret caret = (DefaultCaret) myText.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
// Create the input for the user
userText = new JTextField();
userText.addActionListener(this);
panel.add(new JScrollPane(myText), BorderLayout.CENTER);
panel.add(userText, BorderLayout.SOUTH);
return panel;
}
/*
* Waits until a value is typed in the console and returns it
*/
public String read(){
print("==>");
synchronized (sync) {
try {
sync.wait();
} catch (InterruptedException e) {
return readText = "";
}
}
return readText;
}
/*
* Prints s
*/
public synchronized void print(String s){
// Add the "s" string to the console and
myText.append(s);
}
/*
* Prints s and a new line
*/
public synchronized void println(String s){
this.print(s + "\r\n");
}
/*
* Close the console
*/
public void closeConsole(){
frame.dispose();
}
@Override
public void actionPerformed(ActionEvent e) {
// Check if the input is empty
if ( !userText.getText().equals("") ){
readText = userText.getText();
println(" " + readText);
userText.setText("");
synchronized (sync) {
sync.notify();
}
}
}
}
以下是如何使用它(示例)。它只是询问你的年龄,并根据你的输入写出一些东西:
public static void main(String[] args) {
MyConsole console = new MyConsole();
console.println("Hello! (Type \"0\" to exit)");
int age = 1;
do{
console.println("How old are you ?");
String read = console.read();
try {
age = Integer.valueOf(read);
if ( age >= 18){
console.println("Wow! " + age + " ? You are an adult already!");
}else if ( age > 0 ){
console.println("Oh! " + age + " ? You are such a young boy!");
}else if (age == 0){
console.println("Bye bye!");
}else{
console.println("You can't be " + age + " years old!");
}
}catch (Exception e) {
console.println("Did you write any number there ?");
}
} while ( age != 0 );
console.closeConsole();
}
这是一张图片: