在Java中,如何ArrayList在初始化之后创建只读(以便没有人可以添加元素,编辑或删除元素)?
我正在编写一个程序,我有一个JFrame,我想从中删除所有组件,然后只添加一个组件并重新绘制框架.到目前为止我所拥有的是类似下面的代码(在实现JFrame的对象中调用,其中StartPanel实现JPanel):
removeAll();
startPanel = new StartPanel();
startPanel.setVisible(true);
add(startPanel);
revalidate();
repaint();
Run Code Online (Sandbox Code Playgroud)
但是,当我运行代码时,它显示一个空窗口(不是startPanel),当我最小化/调整窗口大小时,窗口变黑.如果我遗漏了removeAll()JFrame上已有的元素,那么它就会显示startPanel.关于如何实际删除所有内容,然后让新面板仍然出现的任何想法?
我有一个java项目,从Eclipse中运行它时可以正常工作.当我尝试将其导出到a "JAR file"或"Runnable JAR file".jar文件时创建,但是当我双击它以尝试运行该程序时,它会给我一个错误
"Could not find the main class: package.MainClassName. Program will exit."
Run Code Online (Sandbox Code Playgroud)
正如我所提到的,我尝试导出到两个JAR选项,我指定了main方法所在的正确类,当我查看文件中的实际文件时,.jar一切似乎都是有序的 - 清单看起来像:
Manifest-Version: 1.0
Main-Class: package.MainClassName
(blank line)
Run Code Online (Sandbox Code Playgroud)
并在META-INF文件夹中.我的包名称有一个文件夹,其中包含所有.class文件,包括包含main方法的类.我使用的一些图像和文本文件也出现在jar文件中.
实际的程序并不是太复杂 - 它是一个使用Swing的简单"蛇"游戏(加上代码在Eclipse内部运行时都有效).
是什么原因造成了这个错误以及我如何解决它?如果我应该提供任何其他信息,请告诉我.
我正在尝试在python中创建一个非常基本的服务器来监听端口,当客户端尝试连接时创建TCP连接,接收数据,发回一些东西,然后再次监听(并无限期地重复该过程).这是我到目前为止:
from socket import *
serverName = "localhost"
serverPort = 4444
BUFFER_SIZE = 1024
s = socket(AF_INET, SOCK_STREAM)
s.bind((serverName, serverPort))
s.listen(1)
print "Server is ready to receive data..."
while 1:
newConnection, client = s.accept()
msg = newConnection.recv(BUFFER_SIZE)
print msg
newConnection.send("hello world")
newConnection.close()
Run Code Online (Sandbox Code Playgroud)
有时这似乎工作得很好(如果我将浏览器指向"localhost:4444",服务器会打印出HTTP GET请求,并且网页会打印文本"hello world").但是当我在最后几分钟关闭它后尝试启动服务器时,偶尔会收到以下错误消息:
Traceback (most recent call last):
File "path\server.py", line 8, in <module>
s.bind((serverName, serverPort))
File "C:\Python27\lib\socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
error: [Errno 10048] Only one usage of each socket address (protocol/network address/port) is normally …Run Code Online (Sandbox Code Playgroud) 是否有任何的方式来查看Java中的默认类背后的实际代码(java.awt.*;,javax.swing.*;,等),看看究竟它是什么,是怎么回事?
我并不仅仅意味着文档或方法列表等,而是源代码本身的全部细节(换句话说,如果复制并粘贴到整个方法/类中,可以使用什么来创建完整方法/类的精确副本Java中程序的代码).
我正在尝试在java中创建一个简单的图像编辑程序.我创建了一个ImageCanvas对象,其中包含有关正在编辑的图像的所有信息(一些基本属性,应用的效果列表,BufferedImage图层列表等),我想要一种简单的方法将其保存到磁盘,这样就可以了稍后又开了.
我认为使用Java的defualt Serializable接口可能正是我所寻找的,我可以将整个对象写入文件,并在以后再次将其读回内存.但是,ImageCanvas包含一个ArrayList<BufferedImage>,并且BufferedImage不可序列化(其他一切都是).
我知道可以覆盖writeObject()和readObject()方法,但我从来没有这样做过,我想知道是否有任何简单的方法让Java序列化其他所有内容并有一些自定义的方式来读取/写入BufferedImage磁盘?或者是否有其他方法可以轻松地将整个ImageCanvas对象写入我正在忽略的磁盘?最终我可能会实现我自己的自定义图像文件类型,但是现在我想要一种快速简便的方法来在我测试时暂时保存文件(这个ImageCanvas类会改变很多,所以我不想继续更新我的我最终确定之前的自定义文件类型).
我正在尝试编写一个程序来记录来自我的计算机麦克风的信息并将其保存到文件中.PyAudio看起来像是做这个的更好的软件包之一,他们甚至有一个Windows 7的二进制文件(Python 2.7).我下载了可执行文件并运行它来设置PyAudio,但是当我尝试将PyAudio导入python脚本时,我得到一个错误:
Please build and install the PortAudio Python bindings first.
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
import pyaudio
File "C:\Python27\lib\site-packages\pyaudio.py", line 103, in <module>
sys.exit(-1)
SystemExit: -1
Run Code Online (Sandbox Code Playgroud)
如果我查看pyaudio.py,它失败的代码是:
# attempt to import PortAudio
try:
import _portaudio as pa
except ImportError:
print "Please build and install the PortAudio Python " +\
"bindings first."
sys.exit(-1)
Run Code Online (Sandbox Code Playgroud)
另外,如果它是相关的,如果我去Python27\Lib\site-packages(pyaudio.py所在的地方)有一个名为的文件portaudio_x64.dll.
如果您想通过从源代码构建来安装PyAudio,那么他们网站上的文档似乎只有说明.此外,它说PortAudio v19包含在二进制文件中,所以我认为它在运行安装程序可执行文件后才会起作用.
我不知道出了什么问题,我真的很快就需要这个.什么出问题的任何想法?或者,如果有人推荐类似的软件包,这些软件包更适用于Windows 7(64位)和Python 2.7(Enthought发行版),以及跨平台,我很乐意听到它们.
我有一个java程序,它从数据库中读取大量输入数据,对其进行操作,然后将数据写回另一个数据库(使用ODBC驱动程序,excel和访问数据库,在新的Windows 7机器上).该程序从eclipse运行大约需要17分钟,但是当我创建一个可执行的.jar文件时,它需要额外的10分钟才能运行(总共27分钟).
到目前为止,我发现慢速jar文件(通过搜索SO和谷歌)的两个原因是它们被压缩,并且写入命令提示符(或错误日志)比在eclipse中的控制台需要更长的时间.我尝试创建一个未压缩的jar文件,它只加速了大约10秒钟(这可能是完全随机的,因为运行时间大约相差30秒).我System.out.println()在程序中只有大约10个命令,因此不应该减慢它的速度.
关于是什么导致它运行得如此之慢的任何想法,如果有任何方法我可以再次加速?如果有任何其他可能相关的细节我应该包括在内,请告诉我.谢谢!
我正在尝试创建用于放大和缩小我正在创建的图像编辑应用程序的快捷方式,我发现了一些奇怪的东西.要绑定ctrl+ 的组合+,我必须使用=键和控制和移位掩码:
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_EQUALS, KeyEvent.CTRL_DOWN_MASK + KeyEvent.SHIFT_DOWN_MASK),"ZoomIn");
Run Code Online (Sandbox Code Playgroud)
我尝试直接绑定到VK_PLUS工作的组合都没有:
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, KeyEvent.CTRL_DOWN_MASK + KeyEvent.SHIFT_DOWN_MASK),"ZoomIn");
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, KeyEvent.CTRL_DOWN_MASK),"ZoomIn");
Run Code Online (Sandbox Code Playgroud)
它现在可以使用第一行代码,但我想知道为什么底部两个都不起作用,如果键盘没有+键作为移位=键,那么(理论上)这可能是一个问题.
我有一个程序,当使用32位JVM编译时工作正常,但如果我尝试使用64位JVM则会出现问题.我得到的信息是:"[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified".
我正在尝试使用以下代码连接到Excel和SQL Server数据库:
String file = directory + "/fileName.xlsm";
String connectStr= "jdbc:odbc:DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + file + ";READONLY=false";
try {
Class.forName(getDriver());
gConnection = DriverManager.getConnection(connectStr);
//do stuff with connection
}
Run Code Online (Sandbox Code Playgroud)
当我试图检查驱动程序管理器时,它似乎没有64位版本的驱动程序.任何方法可以轻松解决这个问题,并能够使用64位驱动程序进行连接,而无需手动更改计算机上的设置(因为此程序将分布在多台计算机上,我不希望必须单独为任何计算机下载驱动程序想要运行它)?此外,使用64位驱动程序连接是否更高效,或者32位驱动程序是否同样好/快(我确实有非常大的数据集,所以小差异会有所不同)?
java ×8
swing ×3
eclipse ×2
jar ×2
python ×2
arraylist ×1
collections ×1
connection ×1
excel ×1
image ×1
installation ×1
java-ee ×1
jdbc ×1
jframe ×1
key-bindings ×1
odbc ×1
performance ×1
portaudio ×1
pyaudio ×1
removeall ×1
repaint ×1
sockets ×1
sql-server ×1
webserver ×1
windows-7 ×1